Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Redirecionar após Authorize(Role="Admin")

// GET: Movimentacao
        [Authorize(Roles="Admin")]
        public ActionResult Form()
        {
            ViewBag.Usuarios = usuarioDAO.Lista();
            return View();
        }

Como eu faço para redirecionar para uma página personalizada de permissão de acesso? Está caindo no login quando tento acessar essa função e o acesso é negado pelo Authorize, como posso mudar esse comportamento especificando uma página para apresentar a mensagem ao usuário que ele não tem a permissão de acesso aquela função.

2 respostas
solução!

Oi Osvalcir, tudo bom?

Você pode criar um filtro especifico pra isso. Para isso a gente pode fazer uma anotação especificando para onde o usuario será redirecionado:

// precisamos apenas anotar o controller
[AccessDeniedAuthorize(Roles="SuaRole")]
public class SeuController : Controller

// definição da anotação
AccessDeniedAuthorizeAttribute.cs:

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);
    // aqui a gente verifica se o resultado do filtro foi não autorizado
        if(filterContext.Result is HttpUnauthorizedResult)
        {
            filterContext.Result = new RedirectResult("~/SuaPaginaDeAcessoNegado.aspx");
        }
    }
}

Qualquer duvida é só falar.

Abraço e bons estudos =)

Obrigado André funcionou, acabei mudando um pouco o redirecionamento para utilizar uma Action do controller e mostrar a pagina em .cshtml

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if(filterContext.Result is HttpUnauthorizedResult)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
               new { action = "AcessoNegado", controller = "Home" }));
            }
        }
    }

Obrigado e até a próxima!

Osvalcir