Seria possível alterar o corpo e o status code, quando a requisição não passa na policy?
Seria possível alterar o corpo e o status code, quando a requisição não passa na policy?
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!