2011-06-28 102 views
0

我正在使用CAML Queryy來獲取所有列表項,它們都是ContentType,但我也需要知道當前用戶是否有權查看該文件。Sharepoint 2010,基於當前用戶確定對SPListItem的訪問

這部分我不知道如何檢查它。

我使用此exmpla作爲如何獲取與內容類型相關的項目的參考。

https://sharepoint.stackexchange.com/questions/14566/how-to-find-all-documents-of-a-certain-content-type

感謝。

+0

嘗試訪問資源*,同時冒充用戶*。如果您沒有獲得授權,SP會通知您。 – 2011-06-28 02:10:38

回答

1

在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。沒有使用的超載將使用該站點的「當前用戶」。系統帳戶令牌打開後,系統帳戶是哪個系統帳戶。

+0

感謝ite.DoesHavePermission爲我工作。 –

+0

其他問題,我需要做同樣的事情,但要求,它的theres再次做到這一點??,謝謝。 –

+0

Stefan上面的答案不正確,因爲當頁面被匿名訪問時會導致錯誤。因爲'SPContext.Current.Web.CurrentUser爲null'。有人有解決這個問題的答案嗎? – DaRula

相關問題