天天看點

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

在Salesforce實際開發中,開發者或多或少都會遇見由于操作者權限不足導緻的代碼報錯等BUG,那麼到底該如何規避這些問題呢?

關于本篇文章我想叙述的重點在于 fls/crud 對VF端渲染的影響:

首先,為了測試準備好測試代碼以及測試使用者。

VF PAGE:注意兩個pageblock對應的是同一個對象的兩個字段,每一個pageblock内對應的是同一個字段的不同展現形式(不同的标簽)

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

CONTROLLER:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

1.當我使用者的簡檔對于Account的權限為:all no。

頁面無内容展示。

2.當我使用者的簡檔對于Account的權限為:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

頁面展示:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

會發現,apex:inputfield無效,并且這個時候對于SLA__C字段都看不見,原因是什麼?

既然看不見 ,那我們就要往字段級别考慮,由于該使用者對Account有讀取權限,那麼我們首先要檢查字段的級别:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

Name:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

SLA__C:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

經過對比發現我們的猜想是對的!這裡要額外注意的是inputtext不受FLS控制。

那麼說到這裡,你可能有疑惑,

接下來點選儲存後:日志報錯:

System.VisualforceException: 建立通路權限因為 Account 而被拒絕,控制器操作方法可能無法執行。      

這個錯誤的原因:當你對一個對象沒有建立的權限時,你可以在controller裡new xxx(),此時如果你在前台用apex:inputxxx 标簽渲染改對象,那麼save之後系統首先會将這個錯抛出來;如果你沒引用隻是在背景new object ,并儲存 這個object,那麼不會有任何問題!

3.當權限調整為:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

結果同2。

4.當權限調整為:

SFDC:關于with sharing和without sharing 關鍵字聲明Apex類,涉及到的CRUD/FLS/SHARING的個人總結

結果略有不同的是,inputfield 生效了。

首先總結一下關于crud和fls在VF頁面的控制(不論是否聲明):

(1)當你對一個對象沒有檢視權限,那麼你在前台是渲染不出資料來的

(2)當你有編輯對象的權限時,VF的apex:inputxxx 是enforce 你 遵守FLS級别的控制!

(3)在controller内,及時你沒有這個字段的權限,你是一樣可以拿到的!

不知道大家看到這裡能否了解(第一次寫SF部落格,還請見諒)。。。

最後上一個總結(隻說明一下with/without/no declare 的作用):你可能會疑惑為什麼你沒有說 是否聲明sharing對于頁面渲染的問題。經過我的測試是沒有差別的,具體結果還需各位自己親身驗證一下最好!

關于sharing的類聲明,其實我的了解就是Force.com 對你 所擷取記錄的控制(你能看到多少記錄那就意味着你能拿到多少記錄)。那麼說到這裡你可能會問,拿到記錄你能都編輯麼?答案肯定的告訴你:能(無論你是否有編輯和建立記錄的權限,不涉及頁面)。類級别的代碼不enforce你的權限。

但是!!!賣個關子:

        這裡留一個題,既然類不強制你的權限,那麼當我在背景儲存一個查找字段的時候與 聲明sharing 有無關系?如果有,原因是什麼?

聲明一下:本篇文章的内容都屬于個人的總結,如果有纰漏或者錯誤的地方歡迎大家提出,本人聯系方式QQ34697865.

文章後期維護!

如有雷同純屬巧合嘻嘻嘻

繼續閱讀