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

时间:2008-09-24 02:34:40

标签: c# asp.net impersonation

我有一个全程使用模拟的应用。但是当用户以管理员身份登录时,一些操作要求他们写入服务器本身。现在,如果这些用户对实际服务器没有权限(有些用户没有),则不会让他们写。

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

有没有办法做这样的事情?

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

谢谢。

4 个答案:

答案 0 :(得分:21)

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

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

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 { }
}

答案 1 :(得分:2)

我不确定这是否是首选方法但是当我想要这样做时,我新建了一个WindowsIdentity的实例并调用了Impersonate方法。这允许后续代码模拟不同的Windows用户。它返回一个WindowsImpersonationContext,它有Undo方法,可以再次恢复模拟上下文。

答案 2 :(得分:0)

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

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

这引用了最后一部分,但基本上你冒充User.Identity

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

答案 3 :(得分:0)

我最后给了“认证用户”

的文件夹写权限