1
resposta

JWT perfis

Com faço pra implementar nível de acesso (administrador /usuario comumum) usando essa autenticacao via JWT stateless. Como ficam as permissões pra deletar, alterar registros ou acesso a dashboard por perfil de usuario onde cada um tem acesso somente a sua informação e nao a dos demais??

1 resposta

Oi sttefaniribeiro,

No exemplo do curso adicionamos o filter que autentica o usuário para o Spring em cada request. Com isso é possível recuperar em qualquer componente do Spring o usuário que está logado no momento do request.

Nas suas lógicas de listar/deletar/etc. que precisam de controle de acesso, você tem que recuperar o usuário logado e fazer a verificação se ele tem permissão para executar tal ação.

Por exemplo, vamos considerar que apenas o usuário que criou um tópico tem permissão de exclui-lo. Então teríamos uma lógica como:

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

    //verifica se quem ta excluindo eh o proprio dono do topico:
    if (usuarioLogado.equals(topico.getAutor())) {
        topicoRepository.deleteById(id);
        return ResponseEntity.ok().build();
    }

    return new ResponseEntity<String>("Você não tem permissão para executar essa operação!", HttpStatus.FORBIDDEN);
}

Bons estudos!