2011-04-08 7 views
14

Necesito crear una autorización personalizada en ASP.NET MVC 3. Dentro de la aplicación, la autorización se define en 5 tablas: usuarios, grupos, grupos de usuarios, derechos, grouper. Un usuario puede pertenecer a varios grupos, y cada derecho se puede asignar a varios grupos también. A cada acción del controlador se le asigna un RightID.Autorice al usuario actual contra el controlador y el nombre de la acción en ASP.NET MVC 3

La autorización incorporada no puede acomodar esta configuración, así que traté de crear un AuthorizeAttribute personalizado. Al reemplazar a AuthorizeCore, me di cuenta de que no tenía acceso al nombre del controlador ni a la acción.

¿Puedo de alguna manera pedir al enrutador analizar el Request.RawUrl dentro de AuthorizeCore para obtener el nombre del controlador y la acción? ¿O hay otra forma de hacer lo que quiero?

Respuesta

22
protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    var routeData = httpContext.Request.RequestContext.RouteData; 
    var controller = routeData.GetRequiredString("controller"); 
    var action = routeData.GetRequiredString("action"); 
    ... 
} 
+2

Así que TENGO acceso al controlador y nombre de acción :) –

1

Puede lograr esto usando Action Filters donde tiene acceso a todos los HttpContex.

public class MyAuthorizeAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 

    #region Implementation of IAuthorizationFilter 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
       // ... implementation 

       // filterContext.Controller is the controller 
       // filterContext.RouteData is all the route data 
+1

leí en alguna parte que no debería poner en práctica mi propio filtro de autorización debido a algún problema con la caché de resultados. No estoy seguro de si esto sigue siendo un problema en MVC 3. –

Cuestiones relacionadas