為了能控制不同用戶角色的人員,不同用戶對資料訪問和控制的不同權限,Salesforce 中Sharing Rule功能在設定資料私有化之后,結合程式代碼中的 with Sharing, without sharing, 以及默認預設sharing等關鍵詞的應用能充分有效地根據需要業務需要對不同過濾條件的資料記錄分享給不同的用戶可見, 而非默認將所有資料記錄對所有人可見.

所以最開始需要修改 object 對內對外的可訪問性為私有的Private,
然后添加相關的sharing規則 :

其中分享的物件可以是開放組, 角色, 以及相應的下屬,被分享資料的被訪問權限也可以控制為只讀或者可讀可寫,
添加一條分享記錄 sharing rule 是相對簡單的事兒, 但是如何通程序式去配合資料的過濾就比較難了,
例如 下面一段查詢, 本身默認查詢的是 object中的前200條記錄,按照創建時間排序, 但是根據資料記錄型別RecordType 的差異,各用戶從自己的頁面看到的資料內容不同;

然后我們添加了 sharing rule 規則,對于管理層的資料記錄, 只有系統管理層自己才能看到..

而普通員工, 只能對自己的薪資記錄可見,
代碼控制部分,如下:
public with Sharing class TSP_SalaryListPageController { public Salary__c instance {get; set;} public List<Salary__c> instanceList {get; set;} public integer testIntNumber{get; set;} public string User_Agent {get; set;} public TSP_SalaryListPageController() { instance = [SELECT Id, Name, Salary_Level__c, SalaryAmount__c, Income_Type_Reference__c, Salary_Code__c, Active__c, Start_Date__c, End_Date__c FROM Salary__c limit 1]; instanceList = [SELECT Id, Name, Salary_Level__c, SalaryAmount__c, Income_Type_Reference__c, Salary_Code__c, Active__c, Start_Date__c, End_Date__c FROM Salary__c ]; testIntNumber = 0; User_Agent = ApexPages.currentPage().getHeaders().get('User-Agent'); } public void DeleteSalaryType() { testIntNumber--; } public void EditSalaryType() { testIntNumber++; } }
請特別注意在代碼開頭部分,class 宣告時 必須附帶 with sharing 關鍵詞, 相應的 sharing settings 和sharing rules 才能在程式中發揮作用;
在代碼執行部分, 所有的SoQL 都會按照相應的 sharing rule 來過濾 出結果,
有興趣的同學可以 用不同用戶登錄, 然后 debug.log 輸出一下執行結果,
所以這一塊用好了,能很好地控制資料的過濾和權限操作,
以上拙見, 如果同學入門, 可以嘗試,文中若有差錯,歡迎雅正, 多多交流!
Thanks .
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187026.html
標籤:其他
上一篇:JAVA并發之行程VS執行緒
