1
resposta

Configuração com roles não está funcionando

Boa noite estou tentando fazer a implementação de roles e fiz da seguinte forma.

  • Configuração do SecurityFilterChain:

      @Bean
      public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
          return http.csrf().disable()
                  .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                  .and().authorizeHttpRequests()
                  .antMatchers(HttpMethod.POST, "/login").permitAll()
                  .antMatchers(HttpMethod.GET, "/medicos").hasAnyRole("USER", "ADMIN")
                  .antMatchers(HttpMethod.DELETE, "/medicos").hasRole("ADMIN")
                  .antMatchers(HttpMethod.POST, "/medicos").hasRole("ADMIN")
                  .anyRequest().authenticated()
                  .and().addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)
                  .build();
      }
  • Classe Usuario com a relação com a classe Perfil:

      @ManyToMany(fetch = FetchType.EAGER)
      @JoinTable(name = "tb_usuarios_perfis",
              joinColumns = @JoinColumn(name = "usuario_id"),
              inverseJoinColumns = @JoinColumn(name = "perfil_id"))
      private List<Perfil> perfis = new ArrayList<>();
    
      @Override
      public Collection<? extends GrantedAuthority> getAuthorities() {
          return perfis;
      }
  • Classe Perfil:

@Data
@Table(name = "tb_perfis")
@Entity
public class Perfil implements GrantedAuthority {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;

    @Override
    public String getAuthority() {
        return nome;
    }

}

Deixei um usuario somente com o perfil ROLE_USER e quando tento fazer o delete, eu consigo... é como se a configuração olhasse somente se o usuário está logado, ignorando as roles.

Poderiam me ajudar?

1 resposta

Acredito que na parte da classe usuario teria que ter um atributo Enum, com as roles e indicar no metodo GrantedAuthority que tem no usuario. Ela meio que faz o controle de quem esta autorizado, se tiver na sua acredito que esteja para qualquer um como foi passado nas aulas