Apex類名修飾with sharing Vs without sharing

with sharing Vs without sharing

學習目標
1,瞭解with sharing和without sharing的作用和區別
2,什麼時候使用with sharing和without sharing

對於新手來說(大神可忽視),在寫一個Apex類的時候,工具會自動幫我們寫成
public with sharing class helloWord{},可能新手會忽略這個問題。爲什麼要帶with sharing?它有什麼用?

with sharing和without sharing的作用和區別

1,with sharing:在類名前帶上這個修飾符,那麼類裏涉及到的Sql查詢,都會遵守當前用戶的Profile,PermissionSet,Sharing Setting,Role等權限的並集。假設helloWord這個類有一個查詢A對象的a字段的Dml操作。但是User A並沒有該查詢a字段的權限。那麼加上with sharing就會出現查詢結果爲空。without sharing剛好相反,這傢伙就是讓該類避開系統的所有權限,只要能夠調用這個類,那麼裏面所有的操作都不受權限管控。

什麼時候使用with sharing和without sharing

1,當Apex類對應的是前臺頁面的控制類的時候,建議加上with sharing。這樣方便限制記錄的查看和讀寫。可以使用group和sharing setting去做控制記錄的查看和讀寫。
2,當Apex類是Rest控制類是,(強烈建議)加上with sharing,因爲rest類是供外部訪問的,不加上會有安全隱患
3,在系統內部類和類之間的傳遞類,不涉及前臺展示的類。比如工具類等,可以加上without sharing。這些基礎類不做權限的控制。意味着只要出發的動作能出發這些類,就給他足夠權限去做這件事情。這樣做的好處是防止出現幽靈bug(找半天都找不出原因,最後發現是某個字段沒權限)。

如果本文有錯誤,歡迎指出。一起學習,一起進步!

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