6

Estoy intentando asegurar una acción de controlador para evitar que un usuario acceda a una Entidad a la que no tienen acceso. Puedo hacer esto con el siguiente código.Cómo utilizar Custom AuthorizeAttribute para el controlador que utiliza el valor del parámetro?

public ActionResult Entity(string entityCode) 
{ 
    if (CurrentUser.VerifyEntityPermission(entityCode)) 
    { 
     //populate viewModel... 
     return View(viewModel); 
    } 
    return RedirectToAction("NoAccessToEntity", "Error"); 
} 

Me gustaría poder agregar un atributo a la acción del controlador mismo. Para validar el acceso a la entidad, necesito ver qué valor se ha pasado al controlador y a qué entidades tiene acceso el usuario. es posible?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

cómo lo hizo – Dragon

Respuesta

3

Algo como esto podría ayudarlo en su camino. Aunque es posible que desee agregar algunas propiedades adicionales a su atributo para permitirle especificar su parámetro entityCode en cada acción, en lugar de codificarlo.

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Make sure that this is not NULL before assigning value as string... 
     var entityCode = filterContext.RouteData.Values["entityCode"] as string; 
     // do your logic...   
     if (!allowed) 
      filterContext.Result = new HttpUnauthorizedResult();    
    } 
} 

Además, si el entityCode No esta en el RouteData, puede utilizar filterContext.RequestContext.HttpContext.Request que mirar los datos POST.

+0

cómo obtener los valores de json de la publicación del controlador en Authorizeattribute.and en el método AuthorizeRequest – Dragon

Cuestiones relacionadas