我可以在几个实例中关闭模拟吗
时间:2020-03-06 14:38:20 来源:igfitidea点击:
我有一个贯穿整个模拟过程的应用程序。但是,当用户以管理员身份登录时,需要执行一些操作才能写入服务器本身。现在,如果这些用户没有实际服务器上的权限(有些则没有),则不会让他们写。
我想做的只是关闭几个命令的模拟功能。
有没有办法做这样的事情?
using(HostingEnvironment.Impersonate.Off()) //I know this isn't a command, but you get the idea?
谢谢你。
解决方案
我不确定这是否是首选方法,但是当我想这样做时,我新建了一个WindowsIdentity的实例,并称为Impersonate方法。这允许后续代码模拟其他Windows用户。它返回具有Undo方法的WindowsImpersonationContext,该方法将模拟上下文再次还原。
我们可以关闭页面的身份验证,然后在其余代码中手动模拟已身份验证的用户。
http://support.microsoft.com/kb/306158
这是对最后一部分的引用,但是基本上我们是模拟User.Identity
这意味着我们将必须在任何页面调用的开头模拟,在需要关闭时将其关闭,然后在完成后将其重新打开,但这应该是一个可行的解决方案。
我最终给文件夹授予"已认证用户"的写权限
确保应用程序池确实具有所需的正确权限。
然后,当我们想恢复为应用程序池标识时,请运行以下命令:
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 { } }