Controle de acesso

30 views
Skip to first unread message

Pablo Souza

unread,
Nov 16, 2015, 8:46:10 AM11/16/15
to Caelum Vraptor
Pessoal,

Qual seria a melhor opção para implementar um controle de usuário que chege num nível, por exemplo, de dizer que o Perfil A tem acesso a Edição e Exclusão, mas não pode ter acesso a Inclusões. Esse perfil seria mantido pelo banco.

Estava olhando o BrutAuth, e achei ( dentro da minha inexperiencia ) que seria muito complexo criar regras que atendessem a este cenário até porque o nível de usuário seria algo configurável na própria aplicação.

Alguma sugestão?

--
Atenciosamente,

Pablo Souza
Twitter: @pvrsouza
Tel.: (71) 9983-7775

José Filipe Lyra

unread,
Nov 16, 2015, 8:59:25 AM11/16/15
to caelum-...@googlegroups.com
Oi Pablo!

Cara, eu particularmente não gostei muito do BrutAuth. No fim, depois de bastante pesquisa e várias tentativas com alguns frameworks, acabei optando por implementar um controle de autorização meu.

Meu controle de autorização é baseado em 3 entidades: usuário, perfil, permissão. O usuário pode pertencer a vários perfis. Cada perfil está relacionado a N permissões.
Transferindo essa estrutura para uma base de dados, tenho 5 tabelas: user, user_profile, profile, profile_permission, permission, onde as tabelas user_profile e profile_permission contém apenas as chaves estrangeiras (para o relacionamento N:N).

Com essas tabelas, fiz um interceptor no VRaptor que é chamado somente quando meu método tem a annotation @Security("aqui uma permission").
Nesse interceptor eu verifico o valor fornecido na annotation e comparo com as permissões que o usuário tem.

Se ele tiver autorização, continua, se não eu retorno um 401 Unauthorized.

Qualquer coisa estamos aí =)

Abs,
José Filipe Lyra

--
Você recebeu essa mensagem porque está inscrito no grupo "caelum-vraptor" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para caelum-vrapto...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para caelum-...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/caelum-vraptor.
Para mais opções, acesse https://groups.google.com/d/optout.

Pablo Souza

unread,
Nov 16, 2015, 9:13:58 AM11/16/15
to Caelum Vraptor
Fala José,

Eu tinha pensado em algo parecido com sua abordagem principalmente na parte do db. A única coisa que eu pensei diferente ( ainda não fiz, mas acho que é possível ser feito ) seria de deixar meu interceptor um pouco mais inteligente. Inicialmente minhas regras de acesso estão relacionadas as operacões de CRUD. E meu controle usa todos os verbos necessários para o CRUD, que são @Get, @Put, @Delete e @Post. Entao pensei em cruzar as informações de perfil de acesso do usuário da sessão com o método interceptado. Por exemplo: O usuario tem acesso para fazer Update e o método interceptado tem a anotação @PUT? Deixa passar.

Eu acho que assim, inicialmente evitaria criar novas anotações e seria muito simples deixar o controle de acesso dinâmico através de uma tela de administração na própria aplicação.

Não sei se fui claro.

José Filipe Lyra

unread,
Nov 16, 2015, 9:25:46 AM11/16/15
to caelum-...@googlegroups.com
Legal sua ideia! Imagino que desse jeito ficará bem mais elegante =)

Para o nome das minhas permissões eu sigo o mesmo padrão indicado pelo Apache Shiro, onde se "aninha" o nível da permissão como algo tipo "entidade:ação". Caso tenha vários níveis, pode ser algo "entidade:detalhe:ação".
Achei este padrão muito fácil para novos devs compreenderem e facilita quando as permissões começam a aumentar no sistema.
Reply all
Reply to author
Forward
0 new messages