При использовании атрибута PrincipalPermissionAttribute вы можете ограничить доступ для специфического пользователя или специфической роли. Рассмотрим пример, который требует, чтобы пользователь, обращающийся к странице, принадлежал к группе Administrators сервера. Если пользователь не является членом группы Administrators на Web-сервере, то исполняющая система ASP.NET возбуждает исключение безопасности.

[PrincipalPermission(SecurityAction.Demand,
  Role=@"BUILTIN\Administrators")]
public class MyWebPage
{ ... }

Опять-таки, в этом примере вы должны перехватывать исключение в глобальном обработчике Application_Error, поскольку ваш код не является вызывающим по отношению к Web-странице. В противном случае ASP.NET инициирует исключение и отобразит страницу ошибки ASP.NET в соответствии с конфигурацией в web.config. Следующий пример разрешает вызывать конкретный метод только определенному пользователю:

[PrincipalPermission(SecurityAction.Demand,
   User=@"FARIAMAT\matthew")]
private void DoSomething()
{ ... )

Тот, кто вызывает этот метод, конечно, может перехватить SecurityException в блоке try/catch.

Атрибуты PrincipalPermissionAttribute предлагают вам другой способ защиты вашего кода. Вы не будете использовать их для принятия решений во время выполнения, но их можно использовать для гарантии того, что даже, если правила web.config модифицированы или каким-то образом нарушены, базовый уровень безопасности будет обеспечен.

На заметку! Изменение декларативных прав доступа означает необходимость в перекомпиляции приложения. Но зачем их использовать, если каждое изменение требует перекомпиляции? Разве вы не хотите иметь возможность управлять ролями, просто добавляя, удаляя или изменяя их? Да, и это требует более обобщенного кода, но это не может быть обеспечено декларативными привилегиями. Итак, когда же полезно применять декларативные привилегии? Декларативные привилегии особенно подходят для фиксированных ролей в ваших приложениях, которые не могут быть удалены ни при каких обстоятельствах. Например, роль Administrators необходима большинству приложений и потому не может быть удалена. Поэтому вы можете защитить функциональность, которая должна быть доступна только администраторам, декларативными привилегиями. Типичным примером являются все встроенные группы пользователей Windows — такие как Administrators, PowerUsers, Backup Operators и Users.

Использование службы Roles Service для
авторизации, ориентированной на роли

ASP.NET 2.0 поставляется с готовой к использованию инфраструктурой для управления и применения ролей (подобно Membership API, описанному в главе 21). Эта инфраструктура, будучи полностью расширяемой через механизм поставщиков, такой как и у Membership API, включает встроенную функциональность для

предыдущая    следующая страница    вначало главы    оглавление

936

Hosted by uCoz