代码之家  ›  专栏  ›  技术社区  ›  Chris Ballance

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

  •  1
  • Chris Ballance  · 技术社区  · 15 年前

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

    预期结果: 这两种方法都可以完全访问 当前网站集

    实际结果: 使用方法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 回复  |  直到 7 年前
        1
  •  1
  •   webwires    15 年前

    带有提升的特权的运行提供两个单独的特权。首先,它将用户的Windows标识提升到AppPool帐户,其次,它还将标识提升到SharePoint\System帐户,该帐户是一个内置的安全帐户,提供完全控制(从SharePoint意义上讲)。构建SP对象(如SPSITE)时使用内部SharePoint帐户。

    所以基本上,它将取决于你如何构建你的代码,以及你何时安装你的对象,这些对象会影响到特权的工作方式。