2012-05-07 21 views
1

這更像是一個最佳實踐問題。我們的組織目前在自定義對象的組織範圍內默認情況下擁有「公開閱讀」權限。我們不能因爲現在爲內部員工工作的方式而使其成爲私人,或者我們正試圖避免這種情況。Salesforce:使用SOQL來強制執行安全性並限制記錄訪問是否是一個好主意?

我還創建了一個客戶門戶與自定義視覺力量頁...在哪裏我顯示數據使用SOQL查詢。

在SOQL查詢上添加一個子句以僅返回帳號ID與登錄用戶的acount ID匹配的記錄是一個好主意嗎?

我做到了,它可以正常工作......但是這種方法有什麼缺陷可以忽略嗎?

謝謝, 卡爾文

回答

6

Visualforce Documentation

由於標準控制器在用戶模式下執行,其中,所述 權限,字段級安全性,並且電流 用戶的共享規則強制執行,通過擴展標準控制器,您可以構建一個尊重用戶權限的Visualforce頁面 。雖然 擴展類在系統模式下執行,但標準控制器 以用戶模式執行。與自定義控制器一樣,您可以指定 用戶是否可以根據用戶的配置文件執行控制器擴展中的方法。

相信想法是,只要你的類public with sharing然後權限應執行和記錄不應該被返回的用戶不能看到(同樣帶有字段上的記錄)。

Apex Documentation

的Apex通常運行在系統上下文;也就是說,在代碼執行期間,當前用戶的 權限,字段級安全性和共享規則不會被納入 帳戶。聲明一個類來強制執行適用於當前用戶的共享規則時

使用with sharing關鍵字。例如:

public with sharing class sharingClass { 

// Code here 


} 

聲明一個類時,確保當前用戶的共享規則不強制使用without sharing關鍵字。例如:

public without sharing class noSharing { 

// Code here 


} 

否則,您將不得不花費數小時來確保正確的權限在恰當的時間適用於正確的用戶。它幾乎會徹底擊敗視覺力量頁面的目的!

+0

嗨邁克,感謝這個偉大的答覆。我在我的控制器類聲明中使用「with sharing」關鍵字。組織範圍的默認設置在我需要在客戶門戶中顯示的自定義對象上公開。因此,默認情況下,當用戶查看報告頁面時,他可以查看所有記錄。在配置中我還可以做些什麼來確保用戶無法看到任何不屬於與他相同的帳戶的記錄。這對我來說是一個真正的問題,我已經閱讀了很多文檔。但是通過我們的分享模式,這是一個相當大的挑戰。 –

+1

我對Salesforce CRM客戶門戶部分的工作方式不太瞭解。我們使用它,但是功能有限,我不必爲此工作。不過,我會建議你鎖定那些具有適當的配置文件/角色/權限的對象,以便即使在門戶網站中,用戶也無法訪問所有的內容。否則,您最終可能會被迫在顯示記錄之前手動檢查權限。 –

+1

感謝Mike ...我最終改變了安全設置並使用了大量的門戶用戶許可證。他們提供了一個開箱即用的設置來限制帳戶的記錄使用情況。 –

相關問題