代码之家  ›  专栏  ›  技术社区  ›  naspinski

我可以在几个实例中关闭模拟吗

  •  17
  • naspinski  · 技术社区  · 16 年前

    我有一个应用程序,整个过程中都使用模拟。但是,当用户以管理员身份登录时,一些操作需要他们写入服务器本身。现在,如果这些用户没有在实际服务器上的权限(有些人没有),它将不允许他们写入。

    我想做的是关闭几个命令的模拟。

    有没有办法做到这一点?

    using(HostingEnvironment.Impersonate.Off())
      //I know this isn't a command, but you get the idea?
    

    非常感谢。

    4 回复  |  直到 16 年前
        1
  •  24
  •   Maxime Rouiller    16 年前

    确保应用程序池具有所需的适当权限。

    然后,当您要恢复到应用程序池标识时。。。运行以下命令:

    private WindowsImpersonationContext context = null;
    public void RevertToAppPool()
    {
        try
        {
            if (!WindowsIdentity.GetCurrent().IsSystem)
            {
                context = WindowsIdentity.Impersonate(System.IntPtr.Zero);
            }
        }
        catch { }
    }
    public void UndoImpersonation()
    {
        try
        {
            if (context != null)
            {
                context.Undo();
            }
        }
        catch { }
    }
    
        2
  •  2
  •   jedatu    16 年前

    我不确定这是否是首选方法,但当我想这样做时,我创建了一个新的 WindowsIdentity Impersonate 方法这允许后续代码模拟不同的Windows用户。它返回一个 WindowsImpersonationContext 那有一个 Undo 方法,该方法再次还原模拟上下文。

        3
  •  0
  •   Guvante    16 年前

    您可以关闭页面的身份验证,然后在代码的剩余部分手动模拟经过身份验证的用户。

    http://support.microsoft.com/kb/306158

    这意味着您必须在对页面的任何调用开始时进行模拟,在需要时将其关闭,然后在完成后将其重新打开,但这应该是一个可行的解决方案。

        4
  •  0
  •   naspinski    16 年前

    我只是把文件夹的写入权限授予了“经过身份验证的用户”