Кто-нибудь может объяснить, пожалуйста, следующее поведение c #? Я написал небольшое консольное приложение, чтобы узнать о CAS, но не могу понять, почему следующие строки кода работают так, как они:
string[] myRoles = new string[] { "role1", "role2", "role3" };
GenericIdentity myIdentity = new GenericIdentity("myUsername", "customAuthType");
GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myRoles);
System.Threading.Thread.CurrentPrincipal = myPrincipal;
Console.WriteLine(SecurityManager.IsGranted(new PrincipalPermission(null, "role1")));
Console.WriteLine(SecurityManager.IsGranted(new PrincipalPermission(null, "roleX")));
Вывод «true» для обоих вызовов SecurityManager.IsGranted ().
Если я добавлю следующие строки:
new PrincipalPermission(null, "role1").Demand();
new PrincipalPermission(null, "roleX").Demand();
первый вызов по требованию проходит, но второй (как и ожидалось) вызывает исключение SecurityException.
Почему SecurityManager.IsGranted () не возвращает вызов false для разрешения roleX?