1

我想知道为什么下面列出的两种方法没有提供相同的安全调整。

预期结果: 两种方法都可以完全访问当前网站集中的所有内容

实际结果: 使用方法 #1 时发生安全修整

  • 方法#2 适用于从其他网站检索内容,但方法#1 不能。

  • 这两种方法都可以在匿名模式下跨网络访问,并且都适用于站点管理员帐户。

  • 不同之处在于层次结构经理审批者编辑。方法 #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
    });
4

1 回答 1

1

RunWithElevatedPrivileges 提供两个独立的权限。首先是将用户的 Windows 身份提升到 AppPool 帐户,其次是将身份提升到 SharePoint\System 帐户,这是一个提供完全控制(在 SharePoint 意义上)的内置安全帐户。构建 SP 对象(如 SPSite)时使用内部 SharePoint 帐户。

因此,基本上这将取决于您如何构建代码以及何时实例化影响特权如何发挥作用的对象。

于 2009-02-20T15:39:14.917 回答