У меня проблема при выдаче себя за пользователя. У меня объявлен такой метод:
[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. Проблема в том, что этот метод тоже удачный.
Если я запускаю программу отдельно - с олицетворением и без него, поведение будет правильным: оно будет успешным при олицетворении «Тест» и не работает при вызове от имени пользователя по умолчанию.
В чем проблема?