2013-06-11 2 views
0

Я создаю приложение ASP.net MVC 4.Авторизовать роли через базу данных

В прошлом я использовал атрибут [Авторизовать] для авторизации пользователей в соответствии с их ролью.

Однако теперь мне нужно более гибкое решение, в котором роль авторизации может быть изменена путем изменения базы данных, а не изменения исходного кода.

Может ли кто-нибудь порекомендовать подходящий способ для этого?

Я рассмотрел переопределение метода OnAuthorize, но, по-видимому, это не рекомендуется из-за проблем с кэшированием вывода.

+0

Что вы имеете в виду * изменяющей база данных *? Не могли бы вы пояснить конкретный пример? –

+0

Меняя базу данных, я имею в виду обновление таблицы сопоставления, которая отображает (разрешает) роли для действий/контроллеров. – jjc99

+0

. Это то, что вы ищете: http://stackoverflow.com/questions/22724798/mvc-role-authorization – Deepa

ответ

0

Вы можете сделать что-то вроде этого, мы используем это в нашем приложении

[AttributeUsageAttribute 
     (AttributeTargets.Class | AttributeTargets.Struct | 
     AttributeTargets.Constructor | AttributeTargets.Method, Inherited = false)] 
    public class RequirePermissionsAttribute : ActionFilterAttribute, IAuthorizationFilter 
    { 
// Use inbuilt methods 

// OnAuthorization // HandleUnauthorizedRequest // OnCacheAuthorization }

 [RequirePermissions(PermissionItems.ViewThisPage)] 
     public ActionResult Index() 
     { 
} 
0

Не уверен, что если я правильно поняли ваше требование, но вы могли бы иметь два уровня ролей, с моделью данных:

User -in-> Role -has-> Permission 

С m-n отношениями между Пользователями и Ролями, а также между Ролями и Разрешениями.

Если вы сделаете это, ваши разрешения могут быть довольно мелкозернистыми и стабильными, а роли могут быть крупнозернистыми и гибко сопоставляться с наборами разрешений.

Один из способов реализации этого заключается в том, чтобы просто написать пользовательский номер RoleProvider, который присоединяется к «Пользователи-Роли-разрешения» и возвращает разрешения в качестве ролей приложения.

Если вы сделаете это, вы можете использовать стандартный Authorize атрибут, указав один из ваших мелкозернистых имен разрешения, а не крупнозернистого имени роли, например:

[Authorize(Permissions.ViewCustomers)] 
Смежные вопросы