隨着在salesforce的學習道路上越走越遠,不會的知識也逐漸越來越多,正是驗證了一句話, 你知道的越多,你不知道的就越多.
今天,我們來聊一聊 聲明類的修飾,目前小喵就只知道有 四種 修飾,下面我們就來聊聊下這四種修飾。
首先,我們需要知道是哪 四種修飾, 這四種修飾分別是 with sharing , without sharing , Inherited sharing ,no declaration(無聲明) 四種.
一 . With Sharing
聲明類時使用with sharing關鍵字來強制執行當前用戶的共享規則。顯式設置此關鍵字可確保Apex代碼在當前用戶上下文中運行。
example :
public with sharing class ClassName{
// Code here
}
二 . Without Sharing
聲明類時使用without sharing關鍵字,以確保當前用戶的共享規則不被強制執行。例如,當從使用with sharing聲明的另一個類調用某個類時,可以顯示強制關閉共享規則。
example :
public without sharing class noSharing {
// Code here
}
三 . Inherited Sharing
聲明類時使用Inherited sharing關鍵字來強制執行調用它的類的共享規則。 使用Inherited sharing是一種高級技術,可以在運行時確定共享模式,並設計可以在with sharing 或 without sharing 模式下運行的Apex類。
使用Inherited sharing的共享,以及其他適當的安全檢查,有助於通過AppExchange安全審查,並確保您的特權Apex代碼不會以意外或不安全的方式使用。inherited sharing修飾的Apex類在用作with sahring 修飾共享運行時:
* Aura 組件控制器 (An Aura component controller)
* Visualforce 控制器 (A Visualforce controller)
* Apex REST 服務 (An Apex REST service)
* Apex 交易的任何其他入口點 (Any other entry point to an Apex transaction)
標記爲Inherited sharing 的Apex類和無聲明的Apex類之間有着明顯的區別。如果將該類用作Apex事務的入口點,則無聲明共享的類運行爲without sharing 。但是,Inherited sharing 的Apex類確保默認情況下與 with sharing一樣運行。聲明爲Inherited sharing 的Apex類只有在從已建立的without sharing 上下文顯式調用時才能作爲without sharing 運行。
example :
apex :
public inherited sharing class InheritedSharingClass {
public List<Contact> getAllTheSecrets() {
return [SELECT Name FROM Contact];
}
}
page :
<apex:page controller="InheritedSharingClass">
<apex:repeat value="{!allTheSecrets}" var="record">
{!record.Name}
</apex:repeat>
</apex:page>
四. 無聲明
如果類不聲明 任何類型的修飾的話,稱爲 無聲明,則默認走sharing rules,如果別的類調用此類,則按照別的類的sharing rules 校驗 。
example :
public class C{
// Code here
}
五. 實施細節
- 應用定義方法的類的共享設置,而不是調用方法的類的共享設置。例如,如果在聲明爲with sharing的類中定義了一個方法,而聲明爲without sharing的類調用了該方法,則該方法將在強制執行共享規則的情況下執行。
- 如果一個類沒有明確聲明爲with sharing 或者 without sharing,當前的共享規則仍然有效。因此,該類不強制執行共享規則,除非它從另一個類獲取共享規則。例如,如果該類被另一個強制共享的類調用,則對被調用的類強制執行共享。
- 內部類和外部類都可以聲明爲with sharing. 內部類不從其容器類繼承共享設置。否則,共享設置適用於類中包含的所有代碼,包括初始化代碼、構造函數和方法。
- 當一個類擴展或實現另一個類時,類從父類繼承共享設置。
- Apex 觸發器不能有明確的共享聲明並運行爲 without sharing.
今天的分享就到這裏了,小夥伴們Get到了嗎?
<<Using the with sharing, without sharing, and inherited sharing Keywords>>
(^_^)~喵~!!