Запрос Sharepoint с повышенными привилегиями - PullRequest
1 голос
/ 18 мая 2011

Веб-части требуется доступ к списку 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

Ответы [ 3 ]

6 голосов
/ 18 мая 2011

Вам необходимо создать новый объект с повышенными привилегиями.

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

Кроме того, вы должны распоряжаться вновь созданными объектами, и нет необходимости в двух делегатах.

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
    }
});
4 голосов
/ 18 мая 2011

Если вы создадите объекты Site и Web (или получите доступ к ним из текущего SPContext) вне блока с повышенными правами, они получат разрешения текущего пользователя, вошедшего в систему. Таким образом, ваш запрос, даже если он находится в блоке с повышенными правами, не использует повышенные разрешения. Вам необходимо создать новые объекты Site и Web внутри блока с повышенными правами, затем получить доступ к списку и выполнить запрос, чтобы получить ожидаемые результаты.

Вот ресурс, который объясняет дальше. Хотя это было сделано для SharePoint 2007, оно применимо к SharePoint 2010.

Запуск команд с повышенными привилегиями в Windows SharePoint Services 3.0 http://msdn.microsoft.com/en-us/library/bb466220(v=office.12).aspx

0 голосов
/ 04 июля 2014

Если вы хотите включить операцию записи в список SharePoint, добавьте строку SPWeb.ValidateFormDigest() или SPUtility.ValidateFormDigest() перед методом RWEP.

SPUtility.ValidateFormDigest();
SPSecurity.RunWithElevatedPrivileges(delegate()
{

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...