我在模拟用户时遇到问题。我有一个这样声明的方法:
[PrincipalPermission(SecurityAction.Demand, Name=@"DJPITER-PC\Test", Role="LocalTestGroup")]
static void LocalTestGroupOnly()
{
Console.WriteLine("Inside LocalTestGroupOnly() - {0}",
WindowsIdentity.GetCurrent().Name);
}
调用代码是:
WindowsImpersonationContext context =
WindowsIdentity.Impersonate(token);
Console.WriteLine("Calling LocalTestGroupOnly() as {0}",
WindowsIdentity.GetCurrent().Name);
LocalTestGroupOnly();
context.Undo();
try
{
// Reverted user is displayed properly
Console.WriteLine("Calling LocalTestGroupOnly() as {0}",
WindowsIdentity.GetCurrent().Name);
// This method should fail but if succeeds
LocalTestGroupOnly();
}
catch (SecurityException ex)
{
Console.WriteLine("Your account lacks permission to that function.");
}
默认用户不是 LocalTestGroup 的成员。令牌指示的用户是 LocalTestGroup 的成员。
问题:
第一次调用 LocalTestGroupOnly() 成功,因为令牌指示的用户是 LocalTestGroup 的成员。对 LocalTestGroupOnly() 的第二次调用(作为默认用户)应该会失败,因为默认用户不是“Test”并且它不属于 LocalTestGroup。问题是这种方法也成功了。
如果我单独运行程序 - 无论有没有模拟,我们的行为都是正确的:它在模拟为“测试”时成功,在作为默认用户调用时失败。
这里有什么问题?