Permissão de acesso

5 views
Skip to first unread message

Márcio Habigzang Brufatto

unread,
Sep 28, 2009, 2:22:32 PM9/28/09
to rail...@googlegroups.com
Boa Tarde Pessoal!

Criei uma aplicação bem simples para praticar Ruby on Rails, a aplicação está funcionando tranquilamente.
Mas agora gostaria de colocar um controle de acesso. Alguém poderia me dar algumas dicas de como implementar isso de modo que seja dinâmico.

Valeu!

Everton J. Carpes

unread,
Sep 28, 2009, 2:35:43 PM9/28/09
to rail...@googlegroups.com
Ola,

eu jah abordei esse assunto em alguns outros momentos e tive varias experiencias com isso. Se tu tiver alguma duvida mais especifica, por favor, mande pra cah que eu vejo se te ajudo, mas por enquanto vou te passar o link de 2 discucoes em que se falou disso:

>> http://groups.google.com.br/group/rails-br/browse_thread/thread/3369760220f2b73d/5b25a15894e6502d?#5b25a15894e6502d
>> http://groups.google.com/group/rails-br/browse_thread/thread/cde5927a979a9385

Eu fiz uma engine para tratar disso, mas nunca publiquei pq nao tive saco de revisar e tah sem testes... vivo prometendo que um dia farei isso, mas ateh hj nao rolou... se te interesssar posso te passar os fontes.

Boa sorte aih.



2009/9/28 Márcio Habigzang Brufatto <mhbru...@gmail.com>



--
Everton J. Carpes
Mobile: +55 21 9191.4162
email:   everton...@gmail.com
Yahoo!: everton...@yahoo.com
Jabber: everton...@jabber.org
MSN:    mas...@gmail.com
UIN:    343716195

Twitter: http://twitter.com/everton_carpes
Blog: http://www.geek.com.br/blogs/832697633-My-Way
Feeds: https://www.google.com/reader/shared/05200358440305782625

"If art interprets our dreams, the computer executes them in the guise of programs!" - Alan J. Perlis

Márcio Habigzang Brufatto

unread,
Sep 28, 2009, 2:59:56 PM9/28/09
to rail...@googlegroups.com
Boa tarde Everton!

O que eu preciso é o seguinte:

Ter um perfil de acesso, neste perfil de acesso são incluidos usuários, e esses usuários só poderão utilizar aquilo que foi determinado para aquele perfil.

Ex.

Tenho o perfil administrador e marketing, no perfil administrador eu tenho o usuário joao e no perfil marketing eu tenho os usuários maria e joaquim, o joão pode fazer qualquer coisa dentro do sistema e os usuários maria e joaquim só podem acessar aquilo que se diz respeito a marketing.

Valeu!

2009/9/28 Everton J. Carpes <everton...@gmail.com>

Everton J. Carpes

unread,
Sep 28, 2009, 4:09:09 PM9/28/09
to rail...@googlegroups.com
Entao, existem muitas questoes a serem abordadas aih, por exemplo: tu queres ter essas regras no codigo, ou queres um sistema generico, que te permita incluir regras de acesso desta natureza atraves de uma interface? No caso de querer as regras no proprio codigo, existem plugins que te ajudam com isso, de uma lida nas indicacoes que tem nos dois topicos qu te passei o link antes. Agora se tu quer uma interface para administrar isso, jah eh mais na linha do que eu criei com minha engine, soh que daih tem muita coisa para discutir por aqui, muita decisao de arquitetura por tarz. Como tu pode imaginar isso nao eh uma coisinha simples, envolve muitos modelos e muita coisa distinta.

Márcio Habigzang Brufatto

unread,
Sep 28, 2009, 5:26:11 PM9/28/09
to rail...@googlegroups.com
Boa noite Everton!

Eu quero uma interface grafica onde eu possa atribuir regras de acesso a cada perfil que eu criar, e poder vincular usuários a um perfil.

Everton J. Carpes

unread,
Sep 28, 2009, 9:54:32 PM9/28/09
to rail...@googlegroups.com
Pois eh, explicar isto nao eh exatamente simples, mas vamos tentar chegar a uma checklist:

  • Tu precisa inibir o acesso as actions por default (isso eh primordial)
  • Precisa ter uma forma de dizer que uma action eh publica, privada a um determinado papel de usuarios ou que eh privado a apenas um usuario (imagine que em um blog, "blogueiros"podem editar posts, mas somente os seus proprios posts...)
  • Precisas de mecanismos para dizer que essa ou aquela action eh uma action de uma determinada "funcao" (read, create, update, delete), de forma que seja possivel entre outras coisas, inibir o acesso a actions como new, que precedem a action de create, afinal um usuario nao deve poder acessar nem o formulario que levaria ao create se nao tiver permissao para criar por exemplo.
  • Eh interessante tu impedir que os links que sao mostrados na pagina, considerem o poder de acesso do usuario e nao permita ao mesmo ver links para paginas que nao pode acessar
  • Quanto a interface, tu precisa no minimo, poder vincular cada action com uma funcao (read, create, update, delete) evincular permissoes para cada conjunto paopel de usuario + action + funcao (qualquer um pode ver coisas em um blog, mas soh o dono pode editar posts por exemplo).
  • Certas permissoes precisam ser definidas com um conceito de "posse atraves", como por exemplo, um blogueiro soh pode criar posts em seu proprio blog, portanto, Create de posts eh controlado atraves do owner do Blog, o recurso pai no caso.
Essa checklist eh soh superficial e dela derivam as MUITAS escolhas que tu precisa fazer para chegar a uma solucao para este tipo de problema. Por exemplo, eh preciso que tu decida como vai querer identificar as actions em questao e se de fato vais querer controlar o acesso para cada action.. eu na minha engine nao fiz dessa forma, eu acrescentei mais uma camada aih, estabelecendo que permissoes sao definidas para "categorias de ferramentas", e as actions passam a pertencer a uma determinada categoria (o que pode ser mudado dinamicamente).

Tem aih varios outros porems... eu tou repassando essa listinha apenas para ressaltar o como criar uma coisa dessas nao eh nada trivial, especialmente quando se quer uma solucao generica (reaproveitavel)... cada aplicacao tem uma realidade bem especifica, tu precisa identificar as propriedades da aplicacao que tu deseja criar e apartir de entao modelar a coisa. Nao tem como aqui eu dar um passo a paso ou apontar todos os problemas que tu vai encontrar... na verdade existem MUITOS (simplesmente tu descobrir todas as actions jah vai ser um pequeno problema) e por aih seguem algumas das questoes...

Se tiveres alguma questao mais especifica, manda ae! Esse problema eh um dos que menos vejo evoluir e eh uma constante em todos os projetos em que trabalho...

Márcio Habigzang Brufatto

unread,
Sep 30, 2009, 9:41:08 AM9/30/09
to rail...@googlegroups.com
Bom dia Everton!

Estava pensando no problema e uma das opções que encontrei seria criar uma estura(MVC) para User, Rules e Perfil, onde
cada user pertencerá a um perfil, um perfil terá vários users e rules terá as regras de acesso vinculados a perfis.

O que tu acha?

Everton J. Carpes

unread,
Sep 30, 2009, 10:17:06 AM9/30/09
to rail...@googlegroups.com
Ok, esse eh um lado da coisa, eu tbm escolhi que cada usuario soh pode pertencer a um perfil (ou papel). Esta estrututra ta ok, chama-se RBAC (role based access control), o ponto eh como tu vai definir as regras? Como tu pensa que seria uma regra?


2009/9/30 Márcio Habigzang Brufatto <mhbru...@gmail.com>

Márcio Habigzang Brufatto

unread,
Sep 30, 2009, 10:31:49 AM9/30/09
to rail...@googlegroups.com
Isso é outra questão que tenho que estudar.

2009/9/30 Everton J. Carpes <everton...@gmail.com>

Márcio Habigzang Brufatto

unread,
Sep 30, 2009, 12:13:59 PM9/30/09
to rail...@googlegroups.com
Boa Tarde!

Tu terias alguma sugestão de como implementar esse controle?

Muito Obrigado!

Everton J. Carpes

unread,
Sep 30, 2009, 2:09:44 PM9/30/09
to rail...@googlegroups.com
Bom, primeiramente eu sugiro que tu leia com calma o que eu te passei antes, com os links e tudo mais.

Na minha engine eu modelei um vinculo entre papeis de usuarios, categorias de ferramentas e funcoes (no caso uma das 4 funcoes CRUD).
No caso, uma regra de acesso significa que se a action nao eh publica ele soh poderah acessa-la se tiver uma permissao para fazer naquela categoria de ferramentas a funcao especifica.


Eu modelei isso dessa forma para que fosse generico o suficiente para ter esses dados no banco e a engine poder ser reaproveitada entre aplicacoes. Desta forma que eu modelei eh preciso que a aplicacao carregue dados das actions no banco, isso nao eh bem legal, pq tu pode mandar uma atualizacao e esquecer de ressincronizar as actions, mas esse eh um preco que eu preferi pagar. Se tu pretende fazer a coisa de forma diferente, pode cogitar ter as informacoes de controle de acesso inscritas diretamente nos controllers.

Márcio Habigzang Brufatto

unread,
Oct 2, 2009, 9:22:55 AM10/2/09
to rail...@googlegroups.com
Bom dia Everton!

Gostaria de saber se tu utilizou os códigos de um dos links para implementar esse esquema.

Valeu!

Everton J. Carpes

unread,
Oct 2, 2009, 9:44:53 AM10/2/09
to rail...@googlegroups.com
Cara eu criei esse negocio antes dos posts que passei aih, os exemplos que eu coloquei forma citacoes a coisas que eu tinha aqui. Desde aquele tempo algumas coisas jah mudaram, mas o que tem lah eh valido aindam.

Porem gostaria de observar que a implementacao que eu fiz tah long de ser boa, a infra que eu abracei eh legal e a modelagem resolve bem a maioria dos problemas, mas quando a implementacao eu gostaria de revisar completamente, ateh por isso que eu tenho pedido ajuda com isso a anos, mas na boa, jah desisti de conseguir alguem afim disso :/ ateh pq eu tenho sido vagabundo e nunca me prestei a isolar essa engine corretamente nem adicionar as camadas de teste que isso merece.

2009/10/2 Márcio Habigzang Brufatto <mhbru...@gmail.com>

Márcio Habigzang Brufatto

unread,
Oct 2, 2009, 9:55:18 AM10/2/09
to rail...@googlegroups.com
Tu não quer me passar a tua implementação, para que eu possa dar uma olhada e ver, e tentar dar uma melhorada?

Valeu!

2009/10/2 Everton J. Carpes <everton...@gmail.com>

Everton J. Carpes

unread,
Oct 2, 2009, 10:25:28 AM10/2/09
to rail...@googlegroups.com
Vou tentar isolar a versao mais recente disso e jogar no git-hub (entenda por isolar, remover referencias a clientes e a partes de aplicacoes em que esta inserido).

Márcio Habigzang Brufatto

unread,
Oct 2, 2009, 10:34:47 AM10/2/09
to rail...@googlegroups.com
Ok.
Reply all
Reply to author
Forward
0 new messages