Метод, предложенный @Nico, будет работать.
Альтернатива, которая, возможно, обеспечивает лучшую герметизацию и гибкость, заключается в использовании ClaimsPrincipalPermissionAttribute
вместо AuthorizeAttribute
. Это часть WIF, которая теоретически является предпочтительной основой для идентификации и авторизации в .NET.
В этой модели ClaimsPrincipalPermissionAttribute
определяет контекст авторизации запроса, с точки зрения ресурсов и операции - что он описывает запрос, не то, кто может получить доступ к нему.
Фактическая логика авторизации затем инкапсулируется в пользовательский ClaimAuthorizationManager
, которому предоставляется текущий пользовательский принцип и контекст авторизации. Работа - это просто проверка авторизации. Управление ClaimAuthorizationManager
осуществляется с помощью конфигурации в файле web.config приложения.
Все это описано здесь
http://msdn.microsoft.com/en-us/library/system.identitymodel.services.claimsprincipalpermissionattribute.aspx
Хотя я предпочитаю этот метод я не думаю, что есть очень веские причины, чтобы предпочесть один над другим. Я думаю, что преимущество этого подхода являются:
- Это обеспечивает лучшую герметизацию
- Это более гибкая
- Он вызывается CLR, а не в рамках MVC, то есть это будет вызвана с помощью модульных тестов или в любом месте декорированный метод называется
- Он может быть использован императивно, а также декларативно (
ClaimsPrincipalPermission.CheckAccess("Customer","Add"))
- Это, как представляется, в большей степени совпадают с направлением Microsoft собираются
Недостатком является
- Это .Net 4.5 только. Если вы находитесь на .Net 3.5 или 4, вам придется использовать более раннюю версию WIF. Он очень похож на версию .Net 4.5 (но не идентичен).Пространства имен являются
Microsoft.IdentityModel
вместо System.IdentityModel
Как я уже говорил, хотя, это в основном вопрос предпочтения, на мой взгляд.
Я знаю, что вопрос такого же типа задавался раньше, но я не нашел удовлетворительного ответа на него. – vivek