Mais de dois ROLES_USERS no spring security

5 respostas
C

Bom pessoal estou em um projeto e nele há três tipos de usuários: admin, cliente e empresa, cada um com seu acesso e painel no spring security pede para criar uma tabela usuarios e uma permissao_usuario. Já tentei de tudo e ainda não consegui entender como criar as ROLES já que nas tabelas dessas três entidades há campos diferentes e não estou conseguindo enxrergar como vou relacionar a classe usuario com a classe admin, cliente e empresa.

5 Respostas

Roselito_Favero_da_S

Se ajudar, tenho um exemplo aqui:

C

Roselito, muito obrigado por sua prestatividade, mas o meu problema é que eu tenho três atores no sistema: admin, cliente e empresa. A pergunta é: como vou montar as queries no arquivo applicationContext do spring-security. Já que eu tenho que ter uma relacionamento entre usuario e permissão -> usuario_permissao, só que no meu sistema eu não tenho a tabela usuario e sim admin, cliente e empresa.

Roselito_Favero_da_S

Cícero,

Posso estar enganado (se eu estiver, algum colega me corrija) - mas essas tabelas são padrão do Spring. Você pode usar outros métodos de autenticação, como LDAP, ou até mesmo embarcar os usuários no arquivo de configuração. Mas a filosofia é ter as tabelas para autenticar, e usar as roles correspondentes ao usuário que já foi autenticado para autorizar. Como autorizar? pelas permissões dadas na configuração do Spring (por páginas, ou pastas) ou dentro do código, autorizando métodos, etc… E as roles podem ser combinadas de várias maneiras. Dê uma olhada aqui:

http://docs.spring.io/autorepo/docs/spring-security/3.1.4.RELEASE/reference/ns-config.html

C

Deixa eu ver se entendi, se é ROLE_USER é porque ele já está cadastrado, correto? mas o que eu quero dizer é que eu tenho três tipos de usuarios: admin, cliente e empresa e tenho que após a autenticação direciona-los. Como eu vou fazer a query no authotities-by-userName-queries? Essa é a questão.

Roselito_Favero_da_S

Você pode ver as ROLES como grupos. Se é ROLE_USER, é porque pertence ao grupo user. Se é ROLE_ADMIN, é porque pertence ao grupo admin. Esses pares (usuario, grupo) ou (user, authority) é que estão cadastrados na tabela authorities. O seu sistema não sabe que o usuario A está no grupo admin - ele sabe que a página X (ou o método Z) pode ser acessado por um usuário do grupo admin, seja ele qualquer usuário daquele grupo. Essa é a diferença entre autenticação (o usuário está cadastrado e a senha passada coincide com a armazenada) e autorização (este local ou método pode ser acessado pelo grupo xyz).

Criado 23 de novembro de 2013
Ultima resposta 23 de nov. de 2013
Respostas 5
Participantes 2