Мне интересно, почему два метода, перечисленных ниже, не дают одинаковое усечение безопасности.
Ожидаемый результат: Оба метода дают полный доступ ко всему контенту в текущем семействе сайтов
Фактический результат: При использовании метода № 1
происходит корректировка безопасности
Метод № 2 работает правильно для извлечения контента из других веб-сайтов, но метод № 1 не работает.
Оба метода предоставляют доступ через Интернет в режиме Anonymous , и оба работают для администратора сайта учетных записей.
Разница возникает для Иерархических менеджеров , Утверждающих и Редакторов . Метод № 1 не предоставляет доступ администратора через Интернет.
Метод № 1
using (SystemOperation op = new SystemOperation())
{
//Do an operation that requires retrieving across webs
}
public class SystemOperation : IDisposable
{
private WindowsImpersonationContext ctx;
public SystemOperation()
{
if (!WindowsIdentity.GetCurrent().IsSystem)
{
ctx = WindowsIdentity.Impersonate(System.IntPtr.Zero);
}
}
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool all)
{
if (ctx != null)
{
ctx.Undo();
}
}
}
Метод № 2:
Microsoft.Sharepoint.SPSecurity.RunWithElevatedPrivileges(delegate()
{
//Do an operation that requires retrieving across webs
});