como vou conseguir deletar com o INSTRUTOR se ele não está mapeando, no resposta do mão na massa está igual
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
como vou conseguir deletar com o INSTRUTOR se ele não está mapeando, no resposta do mão na massa está igual
Ola!
O ponto principal é: existem duas camadas de validação no seu projeto:
Na sua configuração você tem, por exemplo:
req.requestMatchers(HttpMethod.DELETE, "/topicos/**").hasRole("ESTUDANTE");
Ou seja:
➡Só ESTUDANTE pode chegar até o endpoint DELETE
Então um INSTRUTOR nem chega no método — o Spring bloqueia antes.
Lá dentro você tem isso:
if(hierarquiaService.usuarioNaoTemPermissoes(logado, autor, "ROLE_MODERADOR"))
Essa regra diz:
Se for autor OU tiver papel maior (ex: MODERADOR) pode executar
O problema é:
Então o fluxo fica assim:
| Perfil | Chega no controller? | Pode executar regra? |
|---|---|---|
| ESTUDANTE | Sim | Sim (se autor) |
| INSTRUTOR | Não | — |
| MODERADOR | Não | — |
Você precisa alinhar o Security com o Service.
Se a regra é:
Então o endpoint deveria permitir ambos:
req.requestMatchers(HttpMethod.DELETE, "/topicos/**")
.hasAnyRole("ESTUDANTE", "MODERADOR");
Depende da regra do exercício:
Para respostas, o enunciado diz:
estudantes e instrutores excluem e alteram somente respostas que tenham criado
Então nesse caso você deve permitir:
req.requestMatchers(HttpMethod.DELETE, "/topicos/*/respostas/**")
.hasAnyRole("ESTUDANTE", "INSTRUTOR", "MODERADOR");
E deixar o controle fino no Service.
Você não está conseguindo deletar com INSTRUTOR porque:
➡O Spring Security nem deixa ele entrar na rota
➡ A validação do Service nunca é executada