Arquitetura flexível para tratamento de perfis.  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
javaly
Thread.start()

Membro desde: 28/03/2006 11:49:44
Mensagens: 27
Offline

Saudações,

Estou por iniciar um projeto onde vamos precisamos de um tratamento de perfis bem flexível. Do tipo em que os sistema terá muitos usuários, com diferentes tipos de perfis, no entanto com muitas funcionalidades em comum entre esses perfis. Também tem perfis que parecem herdar de outros e especializa algumas funcionalidades. Quero criar uma forma bem flexível para tratar isso e gostaria de poder contar com a ajuda de vocês, seja com dicas, indicações de materiais, livros... ou qualquer meio que trate do assunto.

Desde já agradeço.

Abraços.

Att,
Emerson Carvalho
SCJP 1.5
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

Minha sugestão é seguir o que a API te oferece: JAAS.

http://java.sun.com/javase/6/docs/technotes/guides/security/
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1669
Localização: São Paulo
Offline

Spring Security (antigo Acegi).

Caso você precise mudar o seu tipo de segurança, só mudar o provedor.


[]'s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey+Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Precisa de uma ferramenta boa para web services, mas está cansado das ferramentas tradicionais? #Banshee

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

javaly
Thread.start()

Membro desde: 28/03/2006 11:49:44
Mensagens: 27
Offline

Olá pessoal,

Agradeço as respostas.


Att,
Emerson Carvalho
SCJP 1.5
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

javaly wrote:Saudações,

Estou por iniciar um projeto onde vamos precisamos de um tratamento de perfis bem flexível. Do tipo em que os sistema terá muitos usuários, com diferentes tipos de perfis, no entanto com muitas funcionalidades em comum entre esses perfis. Também tem perfis que parecem herdar de outros e especializa algumas funcionalidades. Quero criar uma forma bem flexível para tratar isso e gostaria de poder contar com a ajuda de vocês, seja com dicas, indicações de materiais, livros... ou qualquer meio que trate do assunto.


Primeiro tenho que dizer que isso não é um problema de arquitetura e sim de design.
Segundo esqueça JAAS num primeiro momento.

O mecanismo mais flexivel é o seguinte:

Um sujeito (usuário, sistema) tem um conjunto de roles (papeis). Cada role tem um conjunto de perfis (profile). Cada perfil tem um conjunto de permissões.

sujeito = Quem
role = Responsabilidade
Perfil = Capacidade no sistema

A Ana tem o papel de Gerente de Conta. O Gerente de conta Precisa de abrir contas (Perfil = AccountOpener), fechar contas (Perfil = AccountCloser) , movimentar dinheiro em nome do cliente (Perfil = AccountTransferProxyOperator) e imprimir relatorio de XYZ (Perfil = XYZReportObserver)

Cada perfil é relacionado a um conjunto de permissões. No codigo vc coloca entraves baseado nessas permissões e faz checks do tipo

sujeito.hasPermission(permissaoDesejada).

Internamente isso itera nos perfis de cada role do sujeito. Se algum deles liberar essa permissão, o sujeito tem essa permissão.

Em termos de cadastro vc cadastro o sujeito (usuários ou sistemas externos) , vc cadastra os roles agrupando neles os perfis. cadastra os perfis agrupando as permissões. As permissões são fixa e dadas pelo sistema.

Associar as permissões directamente aos roles é bom para sistema muito simples,mas vira um caos gerencial nos cadastros. É bom apenas para quando a relação role-permissão é fixa. Em sistema sérios feitos para durar isso nunca é o caso. Em produtos então, é completamente impossivel.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
javaly
Thread.start()

Membro desde: 28/03/2006 11:49:44
Mensagens: 27
Offline

Olá Sérgio, como vai?

Era algo assim que eu estava esperando. Estava pensando em algo parecido, mas pelo que você disse bem diferente.

Pensei em User>Roles>Perfil. Mas era apenas isso, onde User: Ana, Roles: Gerente Contas e Perfil: Abre/Fecha contas etc...

Pelo que você disse, isso não é flexível, só que não consegui ver onde encaixar as Funcionalidades embaixo dessa estrutura e nem por que não funcionaria.

Sem querer abusar, será que você poderia dar um exemplo.

Agradeço.

Att,
Emerson Carvalho
SCJP 1.5
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1669
Localização: São Paulo
Offline

javaly wrote:Olá Sérgio, como vai?

Era algo assim que eu estava esperando. Estava pensando em algo parecido, mas pelo que você disse bem diferente.

Pensei em User>Roles>Perfil. Mas era apenas isso, onde User: Ana, Roles: Gerente Contas e Perfil: Abre/Fecha contas etc...

Pelo que você disse, isso não é flexível, só que não consegui ver onde encaixar as Funcionalidades embaixo dessa estrutura e nem por que não funcionaria.

Sem querer abusar, será que você poderia dar um exemplo.

Agradeço.


Entendí o que ele disse como sendo a mesma coisa que você disse... =/

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey+Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Precisa de uma ferramenta boa para web services, mas está cansado das ferramentas tradicionais? #Banshee

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

javaly
Thread.start()

Membro desde: 28/03/2006 11:49:44
Mensagens: 27
Offline

Olá asaudate, como vai?

Então, foi assim que entendi, mas quando ele disse ("Em termos de cadastro vc cadastro o sujeito (usuários ou sistemas externos) , vc cadastra os roles agrupando neles os perfis. cadastra os perfis agrupando as permissões. As permissões são fixa e dadas pelo sistema.") me passa a impressão de que dentro dos Perfis estaria um conjunto de permissões, como se o Perfil "Abre Conta" fosse composto por permissões e essas permissões é o que não estou conseguindo ver.

Abraço.

Att,
Emerson Carvalho
SCJP 1.5
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3420
Offline

javaly wrote:Olá asaudate, como vai?

Então, foi assim que entendi, mas quando ele disse ("Em termos de cadastro vc cadastro o sujeito (usuários ou sistemas externos) , vc cadastra os roles agrupando neles os perfis. cadastra os perfis agrupando as permissões. As permissões são fixa e dadas pelo sistema.") me passa a impressão de que dentro dos Perfis estaria um conjunto de permissões, como se o Perfil "Abre Conta" fosse composto por permissões e essas permissões é o que não estou conseguindo ver.


O perfil "AbridouDeConta" necessita de permissões como : pesquisar contas, criar conta, editar conta ( ou conta: search, create, edit). As permissões são as ações que precisão ser liberadas para que a pessoa possa fazer as coisas. Veja que "FechadorDeConta" vai precisa de pesquisar e editar e fechar, mas não de criar. As combinações de permissões são infinitas em tese, mas apenas alguns conjuntos fazem sentido. Esses conjuntos são os perfis.
As permissões são usadas para controlar a visibilidade e usabilidade de botões, menus, etc.. um botão e um menu que invocam a mesma operação estão protegidos pela mesma permissão.

Esqueci de dizer que é nos perfis que ha herança. Vc pode montar um perfil como a soma de outros perfis. Por exemplo um GerenciadorDeConta seria a soma de um abridor e um fechador. Mas da minha experiencia eu não recomendaria ter um esquema de herança de perfil do tipo arvore. Apenas uma funcionalidade que permite criar perfis importanto as permissões de outros.

P.S. Veja que no seu modelo PErfil = Abre/Fecha contas no meu seria Perfil1 = abridor, Perfisl2=Fechador
No seu perfil, o qu o perfil Abre/FEcha pode fazer ? no meu ele pode fazer as permissões que estiverem cadastradas para ele. O sistema não vai testar se o sujeito tem o perfil x ou y, ele vai testar se o sujeito tem a permissão X ou Y. mais do um perfil pode dar a mesma permissão.

This message was edited 1 time. Last update was at 08/01/2010 07:11:18


Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
javaly
Thread.start()

Membro desde: 28/03/2006 11:49:44
Mensagens: 27
Offline

Olá Sérgio, como vai?

Na verdade quando eu citei os perfis Abre/Fecha eu queria dizer que eram dois perfis, no caso, um que abriria e um que fecharia conta. No entanto, depois de ver seus exemplos vi que o modelo não é flexível, pois ficaria como se abrir ou fechar uma conta fossem funcionalidades e não perfis, perdendo assim essa flexibilidade que vc citou. Entendi bem o que você quis dizer no post anterior.

Obrigado pela explicação e pela ajuda.

Att,
Emerson Carvalho
SCJP 1.5
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team