Pergunta

Estou tentando garantir uma ação do controlador para impedir que um usuário acesse uma entidade à qual ele não tem acesso. Sou capaz de fazer isso com o código a seguir.

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

Eu gostaria de poder adicionar um atributo à própria ação do controlador. Para validar o acesso à entidade, preciso ver qual valor foi passado para o controlador e a quais entidades a que o usuário tem acesso. Isso é possível?

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

Solução

Algo assim pode ajudá -lo no seu caminho. Embora você queira adicionar algumas propriedades adicionais ao seu atributo para permitir que você especifique seu parâmetro EntityCode em cada ação, em vez de codificá-lo.

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();            
    }
}

Além disso, se o entityCode não está no seu rotedata, você pode usar filterContext.RequestContext.HttpContext.Request Para olhar para os dados postais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top