1
resposta

[Reclamação] Fiquei em duvida

essa e as permissões de cada usuario como vou conseguir deletar com o INSTRUTOR se ele não está mapeando, no resposta do mão na massa está igual

1 resposta

Ola!

O ponto principal é: existem duas camadas de validação no seu projeto:

  1. Configuração do Spring Security (ConfiguraçõesSeguranca)
  2. Regra de negócio dentro do Service (HierarquiaService)

O que está acontecendo no seu caso

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.

Mas no Service…

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

Onde está a inconsistência

O problema é:

  • O Service permite mais perfis
  • Mas o Security bloqueia antes

Então o fluxo fica assim:

PerfilChega no controller?Pode executar regra?
ESTUDANTESimSim (se autor)
INSTRUTORNão
MODERADORNão

Como corrigir

Você precisa alinhar o Security com o Service.

Se a regra é:

  • Estudante → só os próprios
  • Moderador → qualquer um

Então o endpoint deveria permitir ambos:

req.requestMatchers(HttpMethod.DELETE, "/topicos/**")
   .hasAnyRole("ESTUDANTE", "MODERADOR");

E o INSTRUTOR?

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.

Resumo direto

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

Regra prática pra lembrar

  • Security (Config) → quem PODE acessar a rota
  • Service → quem PODE executar a ação