在MOSS发布站点中使用提升权限运行的方法

时间:2009-02-19 17:10:35

标签: sharepoint sharepoint-2007 moss

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

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

实际结果:使用方法#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
    });

1 个答案:

答案 0 :(得分:1)

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

所以基本上它取决于你如何构建你的代码,以及当你设置影响权限如何运作的对象时。