2010-09-22 13 views
5

Actualmente soy difícil codificar los roles autorizados en el filtro en mis aplicaciones MVC así:asignación dinámica de roles a los controladores en ASP.Net MVC

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

me gustaría tener finalmente una manera de asignar el roles para cada controlador, de modo que el administrador del sitio pueda manejar la asignación de los roles que pueden realizar cada conjunto de acciones.

string roles = DoSomethingToGetAllowableRoles(controllerName); 

[Authorize(Roles = roles)] 

estoy imaginando que tengo que tener una tabla de base de datos que de alguna manera mantiene una lista de cada controlador, y luego otra tabla de asignación de los controladores a los papeles. Lo que me gustaría es una página donde pueda enumerar cada controlador y luego tener un conjunto de casillas de verificación que enumera cada función que se aplica a ese controlador.

¿Alguien tiene un ejemplo o puede llevarme en una dirección que lo logre?

Respuesta

8

Tendrá que escribir su propio filtro de autorización (probablemente extendiendo el incorporado en uno).

La razón de esto es que no se pueden asignar parámetros de atributos dinámicamente así.

No tendrá que meterse con el código fuente de MVC; solo necesita crear una clase que herede de System.Web.Mvc.AuthrorizeAttribute, anule AuthorizeCore, y luego use su atributo en lugar del predeterminado:

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

Supongo que eso es parte de lo que estaba tratando de descubrir, si es posible sin interferir con el código fuente de MVC ... ¡gracias! – Ben

+0

No es tan difícil como crees. He dado un ejemplo. –

Cuestiones relacionadas