Поделиться через


Метод SPSecurity.RunWithElevatedPrivileges

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

Пространство имен:  Microsoft.SharePoint
Сборка:  Microsoft.SharePoint (в Microsoft.SharePoint.dll)

Синтаксис

'Декларация
Public Shared Sub RunWithElevatedPrivileges ( _
    secureCode As SPSecurity.CodeToRunElevated _
)
'Применение
Dim secureCode As SPSecurity.CodeToRunElevatedSPSecurity.RunWithElevatedPrivileges(secureCode)
public static void RunWithElevatedPrivileges(
    SPSecurity.CodeToRunElevated secureCode
)

Параметры

  • secureCode
    Тип: Microsoft.SharePoint.SPSecurity.CodeToRunElevated

    Метод делегата, который запускается с повышенными правами. Этот метод выполняется под удостоверением пула приложений, который имеет права администратора на всех семейств узлов, поддерживаемого этим пулом приложений.

Замечания

Объект secureCode могут создаваться из любой метод, который не содержит параметров и возвращает void. Увидеть SPSecurity.CodeToRunElevated.

Также можно обойти с помощью конструктора SPSecurity.CodeToRunElevated путем определения анонимного метода в вызове RunWithElevatedPrivileges.

Важно!

Если secureCode содержит все операции записи, вызов метода RunWithElevatedPrivileges следует перед вызовом SPUtility.ValidateFormDigest() или SPWeb.ValidateFormDigest().

Примеры

В первом примере показано RunWithElevatedPrivileges конструктора SPSecurity.CodeToRunElevated . В этом примере GetSitesAndGroups — без параметров метод, возвращающий значение void и определен где-либо, может осуществляться с помощью метода Button1_Click .

protected void Button1_Click(object sender, EventArgs e)
{
   SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups = new SPSecurity.CodeToRunElevated(GetSitesAndGroups);
   SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
}

Следующий пример показывает синтаксис, необходимый для определения анонимного метода в вызове RunWithElevatedPrivileges.

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    // implementation details omitted
});

Объект SPSite , созданный за пределами делегат может ссылаться внутри делегата, однако методы и свойства assessors объекта выполняются с правами пользователя контекста, в котором объекты были созданы, а не с повышенными правами. Тот же момент относится к SPWeb объекты и другие объекты. Необходимо создать новые объекты внутри делегата, если нужно выполнить члены объектов с повышенными привилегиями. Если новый объект должен представлять же материализованной сущности как объект, созданный за пределами делегата, должен ссылаться идентификационные данные из внешних созданный объект и использовать его для создания нового объекта внутри делегата. Например, если web является ссылкой на объект SPWeb , созданный до вызова RunWithElevatedPrivileges, затем в следующем коде показано, можно использовать идентификатор родительского объекта SPSite для создания нового объекта SPSite .

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(web.Site.ID))
    {
    // implementation details omitted
    }
});

Делегат члены объекта site запуска с повышенными правами, но вызовы элементов web.Site не будет. Обратите внимание, что ключевое слово using используется для убедитесь, что объект будет удален в делегате.

См. также

Справочные материалы

SPSecurity класс

Элементы SPSecurity

Пространство имен Microsoft.SharePoint

Другие ресурсы

Elevation of Privilege

Anonymous Methods (C# Programming Guide)