2
respostas

Validar Perfil

Além da validar o usuário eu gostaria de validar se para determinado serviço o usuário também possua um PERFIL desejado. Por exemplo, para excluir um Tópico eu quero verificar se o usuário tem o perfil de ADMINISTRADOR. Como implementar?

2 respostas

Oi Jose,

Nesse caso como se trata de uma regra de negocio, não vai ser via configurações do Spring Security, mas sim uma lógica que você precisará executar na aplicação.

Daria pra fazer diretamente no Controller:

@DeleteMapping("/{id}")
@Transactional
@CacheEvict(value = "listaDeTopicos", allEntries = true)
public ResponseEntity<?> remover(@PathVariable Long id, @AuthenticationPrincipal Usuario logado) {
    Optional<Topico> optional = topicoRepository.findById(id);
    if (!optional.isPresent()) {
        return ResponseEntity.notFound().build();
    }

    //validando se quem esta exluindo eh o dono do topico ou um moderador
    Topico topico = optional.get();
    if (logado.isModerador() || logado.equals(topico.getAutor())) {
        topicoRepository.deleteById(id);
        return ResponseEntity.ok().build();    
    }

    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}

Ou se você preferir, pode isolar essa lógica em uma classe Service, para não deixar misturado no Controller.

Bons estudos!

Valeu professor, muito obrigado!!!