我正在使用CAML Queryy來獲取所有列表項,它們都是ContentType,但我也需要知道當前用戶是否有權查看該文件。Sharepoint 2010,基於當前用戶確定對SPListItem的訪問
這部分我不知道如何檢查它。
我使用此exmpla作爲如何獲取與內容類型相關的項目的參考。
感謝。
我正在使用CAML Queryy來獲取所有列表項,它們都是ContentType,但我也需要知道當前用戶是否有權查看該文件。Sharepoint 2010,基於當前用戶確定對SPListItem的訪問
這部分我不知道如何檢查它。
我使用此exmpla作爲如何獲取與內容類型相關的項目的參考。
感謝。
在SharePoint中默認情況下,我們的代碼會以執行Web請求的用戶身份運行。因此CAML查詢返回的項目已經被安全修剪。意思是,結果集只包含當前用戶被允許「看到」的項目。
在某些情況下,您需要使用系統權限執行CAML查詢。這樣做的SPSite
對象必須與系統帳戶令牌運行結束:
using (SPSite elevatedSite = new SPSite("http://server-url", SPUserToken.SystemAccount))
{
// open web; list;
// execute caml query with system account priveliges.
}
在你可以檢查/確保在特定的列表項的權限與方法DoesUserHavePermissions
這種情況下:
SPListItem item = //...
if (item.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser, SPBasePermissions.ViewListItems))
{
// futher actions if user has permission goes here.
}
重要需要注意的是,您必須調用DoesUserHavePermissions
的超負荷參數SPUser
。沒有使用的超載將使用該站點的「當前用戶」。系統帳戶令牌打開後,系統帳戶是哪個系統帳戶。
感謝ite.DoesHavePermission爲我工作。 –
其他問題,我需要做同樣的事情,但要求,它的theres再次做到這一點??,謝謝。 –
Stefan上面的答案不正確,因爲當頁面被匿名訪問時會導致錯誤。因爲'SPContext.Current.Web.CurrentUser爲null'。有人有解決這個問題的答案嗎? – DaRula
嘗試訪問資源*,同時冒充用戶*。如果您沒有獲得授權,SP會通知您。 – 2011-06-28 02:10:38