Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Roles hierarquicas com spring secutity

Ola, exite alguma forma de colocar as nossas roles de forma hierarquica com Spring Security? Por exemplo dado um sistema que tenha as urls A,B,C,D, e E cujo usuario ADMIN pode acessar todas as funcões e um usuario INTERMEDIARIO acessa somente A,B e C e outro usuario BASICO acesse somente A e B devem ser declaradas da seguinte forma:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/A").hasRole("ADMIN")
            .antMatchers("/B").hasRole("ADMIN")
            .antMatchers("/C").hasRole("ADMIN")
               .antMatchers("/D").hasRole("ADMIN")
            .antMatchers("/E").hasRole("ADMIN")
            .antMatchers("/A").hasRole("INTERMEDIARIO")
            .antMatchers("/B").hasRole("INTERMEDIARIO")
            .antMatchers("/C").hasRole("INTERMEDIARIO")
            .antMatchers("/A").hasRole("BASICO")
            .antMatchers("/B").hasRole("BASICO")
            .antMatchers("/").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login").permitAll()
            .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
    }

Isso da muito trabalho sem falar na repetibilidade, sera que nao tem uma maneira de dizer mais ou menos isso:

ADMIN_ROLE.Access(new String{'A','B','C','D','E'});
INTERMEDIARIO_ROLE.Access(new String{'A','B','C'});
BASICO_ROLE.Access(new String{'A','B'});

Ou ate atraves da url

url('A').canAccess('ADMIN','INTERMEDIARIO','BASICO');
url('A').canAccess('ADMIN','INTERMEDIARIO','BASICO');
url('A').canAccess('ADMIN','INTERMEDIARIO','BASICO');

Sabe qualquer coisa menos repetível Desde ja muito obrigado

1 resposta
solução!

Oi Michel, boa noite. Neste caso, você pode utilizar hasAnyRole ao invés de hasRole:

.antMatchers("/A").hasRole("ADMIN")
.antMatchers("/B").hasRole("ADMIN")
.antMatchers("/C").hasAnyRole("ADMIN", "INTERMEDIARIO")
.antMatchers("/D").hasAnyRole("ADMIN", "INTERMEDIARIO", "COMUM")

espero ter ajudado e bons estudos!