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.
Se ajudar, tenho um exemplo aqui:
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.
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
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.
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).