if (User.IsInRole(@"BUILTIN\Administrators"))
{ ... }
Конечно, можно также привести объект User к WindowsPrincipal и использовать перегруженную версию IsInRole(), которая принимает значение типа перечисления WindowsBuiltInRole, как это описано в главе 22.
На заметку! Префикс @ в строках С# просто позволяет использовать обратный слэш без защиты его дополнительным обратным слэшем. Это особенно удобно, если у вас есть строки с множеством обратных слэшей. Но это также означает, что вы не можете использовать в строке никакие управляющие последовательности (вроде \n или \r). Если вы хотите использовать эти управляющие последовательности, то не применяйте префикс @. Однако в этом случае нужно защищать каждый обратный слэш дополнительным обратным слэшем. В противном случае он будет трактоваться как начало управляющей последовательности. Это значит, что без префикса @ вы должны, например, записывать так: FARIAMAT\\Supervisors.
В .NET предусмотрен другой способ применения правил ролей и пользователей. Вместо проверки методом IsInRole() вы можете использовать класс PrincipalPermission из пространства имен System.Security.Permissions.
Базовая стратегия заключается в создании объекта System.Security.Permissions, который предоставляет необходимую информацию о пользователе или роли. Затем вызывается метод PrincipalPermission.Demand(). Если текущий пользователь не отвечает требованиям, будет возбуждено исключение SecurityException, которое вы можете перехватить (или обработать, используя настраиваемую страницу ошибки).
Метод Demand() принимает два параметра — один для имени пользователя и второй для имени роли. Можно пропустить любой из них, подставив вместо него null-ссылку. Например, следующий код проверяет, является ли пользователь администратором Windows:
try
{
PrincipalPermission pp =
new PrincipalPermission(null, @"BUILTIN\Administrators");
pp.Demand();
// Если управление достигло этой точки, требование удовлетворено.
// Текущий пользователь — администратор.
}
catch (SecurityException err)
{
// Требование не выполнено. Текущий пользователь — не администратор.
}
Преимущество этого подхода в том, что нет необходимости писать никакой условной логики. Вместо этого вы просто требуете всех привилегий, которые необходимы. В частности, это хорошо работает, когда нужно проверить, что пользователь является членом нескольких групп. Недостаток состоит в том, что применение обработки исключений для управления потоком приложения происходит медленно.
предыдущая следующая страница вначало главы оглавление
934