Spring Brasil User Group

Fortalecendo a comunidade Spring no Brasil

Spring Security - Filtro por opções da página

Olá Pessoal,

A algum tempo venho pesquisando mas não consigo descobrir como usar o Spring Security de tal maneira que o mesmo possa filtrar as opções de uma página.

Vamos supor que uma página possa ser acessada por diferentes tipos de usuários, mas nessa página existem botões que um determinado usuário não pode visualizar. Pra mim não importa o Perfil do usuário, mas sim a funcionalidade em questão que ele pode visualizar em uma página.

Alguém sabe me dizer se é possível fazer algo com o Spring Security que trate esse problema?

Att,

Junior Sousa

Exibições: 260

Responder esta

Respostas a este tópico

Junior,

Basta utilizar as taglibs do SS, por exemplo:


< sec:authorize ifAllGranted="ROLE_ADMIN" >
Você é um administrador e também pode acessar esta página
</ sec:authorize >

Att,
Michel.
Olá Michel,

Na verdade o que eu gostaria de fazer era um controle de acesso por funcionalidades, e não por perfil de usuário, por exemplo, supondo que em uma página inicial existam as seguintes funcionlidades:

- criar usuário
- remover usuário

Quando eu crio um usuário eu não associo um nome de perfil á ele, por exemplo, Administrador, usuário ...., mas sim as funcionalidade das quais ele poderá acessar, por exemplo, usuário A pode acessar a opção criar usuário, usuário B remover usuário e um usuário C poderá acessar a funcionalidade criar usuário e remover usuário.

Pelo que entendi, a instrução que você passou irá realizar um filtro apenas pelo nome do perfil do usuário, por exemplo, ROLE_ADMIN, e não pelas funcionalidade que ROLE_ADMIN possui, certo?

Muito Obrigado,

Att,

Junior Sousa
Esse problema ocorreria na seguranca J2EE tambem.
A solucao mais obvia eh ter um ROLE para cada funcionalidade.
Por exemplo, ROLE_CRIAR_USUARIO, ROLE_REMOVER_USUARIO.
E ai voce associa todas as ROLES (funcoes) com cada usuario e usa a taglib.
Att,
Michel.

Junior de Paula Sousa disse:
Olá Michel,

Na verdade o que eu gostaria de fazer era um controle de acesso por funcionalidades, e não por perfil de usuário, por exemplo, supondo que em uma página inicial existam as seguintes funcionlidades:

- criar usuário
- remover usuário

Quando eu crio um usuário eu não associo um nome de perfil á ele, por exemplo, Administrador, usuário ...., mas sim as funcionalidade das quais ele poderá acessar, por exemplo, usuário A pode acessar a opção criar usuário, usuário B remover usuário e um usuário C poderá acessar a funcionalidade criar usuário e remover usuário.

Pelo que entendi, a instrução que você passou irá realizar um filtro apenas pelo nome do perfil do usuário, por exemplo, ROLE_ADMIN, e não pelas funcionalidade que ROLE_ADMIN possui, certo?

Muito Obrigado,

Att,

Junior Sousa
Entendi Michel, vou fazer dessa maneira então.

Muito Obrigado!

Michel Zanini disse:
Esse problema ocorreria na seguranca J2EE tambem.
A solucao mais obvia eh ter um ROLE para cada funcionalidade.
Por exemplo, ROLE_CRIAR_USUARIO, ROLE_REMOVER_USUARIO.
E ai voce associa todas as ROLES (funcoes) com cada usuario e usa a taglib.
Att,
Michel.

Junior de Paula Sousa disse:
Olá Michel,

Na verdade o que eu gostaria de fazer era um controle de acesso por funcionalidades, e não por perfil de usuário, por exemplo, supondo que em uma página inicial existam as seguintes funcionlidades:

- criar usuário
- remover usuário

Quando eu crio um usuário eu não associo um nome de perfil á ele, por exemplo, Administrador, usuário ...., mas sim as funcionalidade das quais ele poderá acessar, por exemplo, usuário A pode acessar a opção criar usuário, usuário B remover usuário e um usuário C poderá acessar a funcionalidade criar usuário e remover usuário.

Pelo que entendi, a instrução que você passou irá realizar um filtro apenas pelo nome do perfil do usuário, por exemplo, ROLE_ADMIN, e não pelas funcionalidade que ROLE_ADMIN possui, certo?

Muito Obrigado,

Att,

Junior Sousa
Tudo bom Junior...
estou passando pela mesma dificuldade que você está passando ou já passou.
você conseguiu resolver o seu problema e como resolveu?
Mas como eu crio cada Role para cada funcionalidade
Olá Ricardo,

Eu não cheguei a implentar um exemplo completo, mas a solução resume-se em:

1 - Você vai criar um módulo de manutenção de PERFIL ACESSO no seu sistema

Exemplo:

Se você tem um tipo usuário (RH), dinâmicamente você poderá cria um perfil chamado RH e depois vai associar as funcionalidades do sistema da qual o perfil RH poderá ter acesso. Por trás disso você poderá criar uma tabela chamada PERFIL para gravar o perfil criado, uma outra chamada PERFIL_FUNCIONALIDADE para gravar o relacionamento do perfil que você está criando com as funcionalidades do sistema.

Na tabela FUNCIONALIDADE você já deverá ter inserido todas as funcionalidades possíveis do seu sistema só que da seguinte forma ROLE_. Exemplo para a lista de funcionário em campo qualquer você deverá gravar o nome ROLE_LISTAR_FUNCIONARIOS, e assim por diante, você deverá fazer isso antes da sua aplicação começar rodar.

2 - No XML do spring security você deverá criar autenticationManager, nesse manager você poderá consultar as roles que um determinado usuário possui por meio joins.

O exemplo que estou colocando aqui é apenas para ilustar como poderia ficar a xml, como disse, eu não cheguei a implentar um exemplo, mas entendi o funcinamento.

Exemplo 2.txt

No atributo authorities-by-username-query você pode gazer a query para guardar os nomes das "Roles (funcionalidades)" que o usuário que está acessando o sistema possui, por exemplo: ROLE_LISTAR_FUNCIONARIOS

3 - Depois disso, na página que você tiver que filtar os menus, você pode validar se o usuário que está acessando o sistema possui a Role necessácia para acessar determinada funcionalidade.


Referências:

http://static.springsource.org/spring-security/site/petclinic-tutor...
http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=12883 -> Michel Zanini
http://www.guj.com.br/posts/list/105437.java

Att,

Junior

Ricardo A. Silvestre. disse:
Tudo bom Junior...
estou passando pela mesma dificuldade que você está passando ou já passou.
você conseguiu resolver o seu problema e como resolveu?
Anexos

Responder à discussão

RSS

© 2012   Criado por Dr. Spock.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço