自訂設定的保護和隱私權選項
管理自訂設定的可視性和權限。
必要版本
| 提供版本:Salesforce Classic 和 Lightning Experience。 |
提供版本:Group、Professional、Developer、Enterprise、Performance、Unlimited 及 Database.com Edition。 Database.com 中未提供封裝。 |
封裝
封裝中僅包含自訂設定定義,不含資料。若要包含資料,請在安裝封裝後,使用訂閱組織執行的標準 Apex 或 API 來填入自訂設定。
當受管理的封裝包含自訂設定,且可視性設定為「受保護」時,只能透過屬於該受管理封裝一部分的 Apex 程式碼來存取此設定。訂閱者組織無法直接存取、讀取或修改受保護的自訂設定。
位於未受管理封裝中的受保護自訂設定的行為如同公用自訂設定。請確保機密、個人識別資訊或任何私人資料都儲存在作為受管理封裝的一部分安裝的受保護自訂中繼資料類型中。在受管理封裝外部,請使用具名認證或加密自訂欄位儲存機密,例如 OAuth 權杖、密碼及其他機密資料。
可視性
您可以在開發人員與臨時組織中建立受保護的自訂設定。自訂設定的選項為:
- 受保護—受管理封裝中的自訂設定可透過相同封裝和命名空間內的 Apex 和公式來看見。不過,有訂閱的組織無法透過 Apex 和 API 來看見這些自訂設定。包含在未受管理封裝中的自訂設定會如同公用自訂設定般運作,且不提供保護。
- 公用—無論封裝類型為何 (受管理或未受管理),以下項目都具有存取權:
- Apex
- 公式
- 流程
- 具有「自訂應用程式」權限或權限透過設定檔或權限集授與之使用者的 API。
結構描述設定
自訂設定的結構描述設定選項為:
- 限制自訂設定的存取權—此組織範圍偏好設定預設為啟用,並會限制對自訂設定值的存取權。具有「自訂應用程式」權限的管理員可以使用「自訂設定定義」或「檢視所有自訂設定」權限,透過設定檔與權限集授與「讀取」存取權給使用者。
- 在自訂設定上啟用 SOSL—不會在 Salesforce 物件搜尋語言 (SOSL) 查詢中傳回自訂設定值。如果您的 Apex 作業需要此功能,請啟用此選項。
在設定檔或權限集上授與權限
預設會啟用限制自訂設定的存取權組織範圍偏好設定,且必須明確授與對自訂設定的「讀取」存取權。
具有「自訂應用程式」權限的管理員可以透過設定檔與權限集授與「讀取」權限給沒有「自訂應用程式」權限的使用者。
- 若要將權限授與給特定自訂設定,請使用「自訂設定定義」權限。
- 若要將權限授與所有自訂設定,請使用「檢視所有自訂設定」權限。
Apex、Visualforce 與 Aura 的行為
Salesforce 中有一些不同的執行程式碼模式會影響自訂設定的可存取性。
在系統模式中執行的 Apex 程式碼會忽略使用者權限,且您的 Apex 程式碼會得到所有物件與欄位的存取權。物件權限、欄位級安全性與共用規則不適用於目前使用者。在系統模式中執行可確保程式碼不會因使用者看不到欄位或物件而失敗。
在使用者模式中,例如 Visualforce 元件、Visualforce 電子郵件範本與 Aura 等功能會依據使用者的權限與記錄的共用來執行。
with sharing 修改項不會影響查詢行為,例如 isAccessible() 和 isCreatable()。如果在 Apex 中擷取欄位值,並將其指派給非 sObject 變數,則無論是否啟用偏好設定,該行為都相同。當在使用者模式中執行功能時,例如 Visualforce 元件、Visualforce 電子郵件範本與 Aura,您必須具有自訂設定的存取權限。例如,如果沒有權限,則您沒有存取權的 Visualforce 頁面上的欄位將不會顯示出來。無論執行的使用者為何,$Setup 全域變數 (適用於 Visualforce 和公式) 都會繼續透過直接參照 (表示指派給 sObject 類型的資料) 載入值。
考量以下情況:
- Apex 會載入記錄,該記錄是包含在如
MySetting__c等變數中的列。 - Visualforce 顯示的內容為
MySetting__c.MyPath__c。 - 載入頁面時即會執行存取檢查。
- 然而,在系統模式中就不會執行檢查,這是標準的 Visualforce 行為。沒有自訂設定權限的使用者將無法顯示 Visualforce 頁面,因為 Visualforce 正在重新起始存取檢查。
在這個情況下,如果使用者沒有自訂設定的權限,則有兩個因應措施。您可以為可以傳遞的每個物件建立字串,或者您可以建立包裝程式類別。請使用這些選項,而非指派如 MySetting__c 的變數,然後呈現 mySetting.Path__c mySetting.Name。例如,
class DataHolder{
public string path {get;set;}
public boolean active {get;set;}
}當您將列載入集合中時,因為此類型是資料類型,而不是 sObject,所以系統會略過 Visualforce 檢查。
以下範例包含 Aura 或 Lightning 元件控制項的 @AuraEnabled 註釋。
class with sharing MyController {
@AuraEnabled
public static List<My__mdt> thisWillNotWork() {
return [select developername from my__mdt];
}
@AuraEnabled
public static List<String> thisWill() {
List<String> retVal = new List<String>();
for(My__mdt config: [select developername from my__mdt]) {
retVal.add(config.DeveloperName);
}
return retVal;
}
}
