Как работать с повышенными привилегиями на странице приложения?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/17805

Вопрос

Я хочу получить элемент списка, к которому у текущего пользователя нет доступа, но мне нужно получить его в коде. Когда я использую SPSecurity.RunWithElevatedPrivileges это не работает.

Это потому, что я использую веб -объект текущего контекста на странице приложения.

Если я хочу заставить код работать, я должен построить еще один объект SPSite и Spweb в RunWithElevatedPrivileges делегат, но я не хочу этого делать.

Как я могу достичь этого, используя текущий веб -контекст на странице приложения?

Это было полезно?

Решение

Вы должны создать создание новых объектов SPSITE и SPWEB внутри вашего делегата runWitelevatedPrivileges (), используя свойства идентификации объектов SPSITE и SPWEB текущего контекста:

Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteId))
    {
        using (SPWeb web = site.OpenWeb(webId))
        {
            // Your code here
        }
    }
});

Могу я спросить, почему вы «не хотите» создавать новые объекты SPSite и Spweb в своем делегате RunWitelevatedPrivileges ()? Если вы используете шаблон дизайна, который я продемонстрировал выше, вам не нужно беспокоиться о вызове Dispose () на новых объектах, которые вы создали.

Другие советы

Спасибо, это очень помогло нам много времени. Отличный ответ :)

Из Spsecurity.runwitelevatedprivileges:

«Объект SPSITE, созданный вне делегата, может быть упомянут внутри делегата, однако, методы и оценщики свойств объекта, работающие с привилегиями пользовательского контекста, в котором были созданы объекты, а не с повышенными привилегиями».

В основном вы должен Создайте новые объекты внутри делегата, чтобы выполнить с полным контролем.

Вы должны создать новый SPSite внутри SPSecurity.RunWitelevatedPrivileges, используя либо URL, либо GUID.

Для подробной информации о spsecurity.runwitelevatedprivileges и других методах олицетворения, проверьте это:

Выражение в SharePoint: крайний обзор

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top