1

Web パーツは、Sharepoint リスト (読み取りモード) にアクセスする必要があります。ユーザーが管理者の場合、問題はありません (想定どおりに動作します) が、ユーザーにアクセス許可がない場合は、「RunWithElevatedPrivileges」メソッドを使用する必要があります。

問題は、クエリが正しい結果を返さないように見えることです。私は何が欠けていますか?

        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
4

3 に答える 3

6

昇格された特権を持つ新しいオブジェクトを作成する必要があります。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    SPSite oSite = new SPSite(SPContext.Current.Site.ID); 
    SPWeb oWeb = oSite.OpenWeb(SPContext.Current.Web.ID);                                 
    demoList = oWeb.Lists["nameList"];
});

また、新しく作成されたオブジェクトを破棄する必要があり、2 つのデリゲートは必要ありません。

SPSecurity.RunWithElevatedPrivileges(delegate {
    using (SPSite oSite =new SPSite(SPContext.Current.Site.ID))
    using (SPWeb oWeb = oSite.OpenWeb()) {
        var demoList = oWeb.Lists["nameList"];
        SPQuery oQuery = new SPQuery
                            { Query = "<OrderBy><FieldRef Name='Date' Ascending='False' /></OrderBy>" };
        SPListItemCollection collListItems = demoList.GetItems(oQuery);

        //IF ADMIN
        //collListItems.Count ==>3

        //IF NO ADMIN 
        //collListItems.Count ==>0
    }
});
于 2011-05-18T11:11:05.060 に答える
4

昇格されたブロックの外側にサイト オブジェクトと Web オブジェクトを作成する (または現在の SPContext からアクセスする) 場合、それらは現在ログインしているユーザーのアクセス許可を持ちます。したがって、クエリは昇格されたブロックにありますが、昇格されたアクセス許可を使用していません。昇格されたブロック内に新しいサイトと Web オブジェクトを作成し、リストにアクセスして、クエリを実行して期待される結果を得る必要があります。

詳細を説明するリソースを次に示します。これは SharePoint 2007 に対して行われましたが、SharePoint 2010 に適用されます。

Windows SharePoint Services 3.0 で昇格された特権でコマンドを実行する http://msdn.microsoft.com/en-us/library/bb466220(v=office.12).aspx

于 2011-05-18T10:52:16.830 に答える