1

У меня есть приложение MVC 4.0 с использованием Entity Framework.Управление доступом на основе ролей для пользователя

У меня таблица USER, таблица ролей, таблица типов.

Роль может быть из двух: Administrator, User

Тип может быть из 8: Нет, Admin, Asst.Admin, ......

Так что я хочу, чтобы разные страницы, которые будут доступны в зависимости от типа, как показано ниже:

1) Типы определены:

None Con  Acc  Rec  St  Fr  Admin AsAd (<-- Types) 
---------------------------------------------------------- 

1.а) Обновление клиента:

None None None None Edit View Full Full (<-- Roles) 

1б) Новый клиент:

None None None View View Edit Full Full (<-- Roles) 

Так как это будет достигнуто?

+0

Что вы пробовали? вы что-нибудь пытались? У вас есть googled? –

ответ

1

Вы можете добиться этого с AuthorizeAttribute:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public sealed class ActionPermissionAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
     var actionName = filterContext.ActionDescriptor.ActionName; 

Добавить этот атрибут для всех действий, которые необходимо уполномочили - добавить в контроллер делает это проще или даже создать базовый контроллер, который наследует Controller, а затем наследует все ваши контроллеры от этого.

Вы можете хранить контроллер + действие против роли в БД

 // get allowed groups for this controller+action from the database (cache this) 
     // get which AD groups the current user is in (or get from the DB etc) 
     var userGroups = HttpContext.Current.Request.LogonUserIdentity.Groups 
         .Translate(typeof(System.Security.Principal.NTAccount)) 
     // check if user in in required group 

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

Я не совсем понял вашу роль и тип, но в MVC все это действие (метод), поэтому вы блокируете отдельные действия (нет «редактировать» только действие под названием «редактировать»).

Смежные вопросы