2010-09-22 7 views
5

Я в настоящее время жесткого кодирования авторизованных ролей в фильтре в моих приложениях MVC выглядеть примерно так:динамического отображения ролей контроллеров в ASP.Net MVC

[Authorize(Roles = "Administrator,Manager")] 

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

string roles = DoSomethingToGetAllowableRoles(controllerName); 

[Authorize(Roles = roles)] 

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

У кого-нибудь есть пример или может привести меня в направлении, которое это выполнит?

ответ

8

Вам нужно будет написать свой собственный фильтр авторизации (возможно, путем расширения встроенного в один).

Причина в том, что вы не можете динамически назначать параметры атрибута.

Вам не нужно связываться с исходным кодом MVC - вам просто нужно создать класс, который наследует от System.Web.Mvc.AuthrorizeAttribute, переопределить AuthorizeCore, а затем вместо вашего значения использовать свой атрибут:

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Put your custom logic here, returning true for success and false for failure, 
     // or return base.AuthorizeCore(httpContext) to defer to the base implementation 
    } 
} 
+0

Я полагаю, что это часть того, что я пытался выяснить - если это возможно, не возиться с исходным кодом MVC ... спасибо! – Ben

+0

Это не так сложно, как вы думаете. Я привел пример. –

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