Webpart需要訪問Sharepoint列表(讀取模式)。如果用戶是管理員,沒有問題(按預期工作),但如果用戶沒有權限訪問,我必須使用「RunWithElevatedPrivileges」方法。帶有提升權限的Sharepoint查詢
問題是,似乎查詢不會返回正確的結果。我錯過了什麼?
SPList demoList = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPSite oSite = SPControl.GetContextSite(HttpContext.Current); // ADDED
SPWeb oWeb = oSite.OpenWeb(); // ADDED
demoList = oWeb.Lists["nameList"];
});
// demoList has 3 Elements (admin and no admin user) OK
SPListItemCollection collListItems = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPQuery oQuery = new SPQuery() { Query = "<OrderBy><FieldRef Name='Date' Ascending='False' /></OrderBy>" };
collListItems = demoList.GetItems(oQuery);
});
//
//IF ADMIN
//collListItems.Count ==>3
//IF NO ADMIN
//collListItems.Count ==>0
注意:RunWithElevatedPrivileges塊中的「泄漏」對象(如返回SPList)可能會導致無法使用的代碼或稍後意外提升權限。請確保不要將SPxxxx對象從傳遞給RunWithElevatedPrivileges的委託中退出(或者確保所有數據在對象中已經可用)。請注意,返回的LINQ查詢結果可能會延遲執行,直到稍後的時間點,並且結果在RunWithElevatedPrivileges調用之外執行SharePoint調用。 – 2011-05-18 21:44:34