salesforce with sharing, without sharing,inherited sharing Keywords and No declaration

     隨着在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>>

(^_^)~喵~!!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章