Pregunta

Estoy tratando de asegurar una acción del controlador para evitar que un usuario acceda a una entidad que no tienen acceso a. Soy capaz de hacer esto con el siguiente código.

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

Me gustaría ser capaz de añadir un atributo a la propia acción del controlador. Con el fin de validar el acceso a la entidad, lo que necesito para ver qué valor se ha pasado al controlador y qué entidades que el usuario tiene acceso. ¿Es esto posible?

[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
        //populate viewModel...
        return View(viewModel);
}
¿Fue útil?

Solución

Algo como esto podría ayudarle en su camino. Aunque es posible que desee añadir algunas propiedades adicionales a su atributo para que pueda especificar el parámetro entitycode en cada acción, en lugar de codificar la misma.

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 está en tu RouteData, se puede utilizar para filterContext.RequestContext.HttpContext.Request vistazo a los datos POST.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top