Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Policy body on fail

Seria possível alterar o corpo e o status code, quando a requisição não passa na policy?

1 resposta
solução!

Olá, Renato! Tudo bem?

Sim, é possível alterar o corpo e o status code quando a requisição não passa na policy. Para isso, você pode utilizar o método HandleFailure da classe AuthorizationHandlerContext dentro do método HandleRequirementAsync da sua classe de política.

Por exemplo, vamos supor que você tenha uma política chamada MinhaPolicy que verifica se o usuário possui determinado papel. Se a requisição não passar nessa política, você pode retornar um status code 403 (Forbidden) e uma mensagem de erro personalizada.

public class MinhaPolicyRequirement : IAuthorizationRequirement
{
    // Implementação da política
}

public class MinhaPolicyHandler : AuthorizationHandler<MinhaPolicyRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinhaPolicyRequirement requirement)
    {
        if (!context.User.HasClaim(c => c.Type == "MeuPapel" && c.Value == "Admin"))
        {
            context.Fail(); // Requisição não passa na política

            // Alterar o corpo da resposta
            context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
            context.Response.WriteAsync("Você não possui permissão para acessar este recurso.");

            return Task.CompletedTask;
        }

        context.Succeed(requirement); // Requisição passa na política

        return Task.CompletedTask;
    }
}

Dessa forma, quando a requisição não passar na política, o corpo da resposta será alterado para a mensagem "Você não possui permissão para acessar este recurso" e o status code será 403.

Espero ter ajudado! Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software