Controle de permissoes aos moldes da OO  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Estou desenvolvendo um sistema onde o usuário deve possuir permissoes para executar qualquer funcionalidade.

Quando eu fui passar isso para meu mundo OO ai que bicho pegou!

A quetão é quem deve controlar as permissões?

Ex.:

Usuário deve possuir permissão para exibir uma imagem.

Vendo através de responsabilidade:

Usuario possui permissão para exibir imagem;(Usuário que sabe as permissões que ele tem)
Imagem requere permissão para se exibir;(Imagem que sabe as permissoes que ele requere para se exibir)

Partindo do principio acima todo os meu objetos de negocio vao fazer verificações de permissão. (Eu particulamente acho isso tosco)

Estava pensando em colocar uma camada acima da de negocio para verificar permissões e gerar Logs!

O que vcs acham???

Como vcs tem feito???
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Tem o tal do JAAS para isso, mas dizem ser muito complicado.

Nas aplicações web aqui utilizamos um Servlet Filter que filtra todas as requisições os recursos (*.do do Struts) e verifica a permissão.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jmizutani
Thread.start()

Membro desde: 18/05/2006 11:53:49
Mensagens: 26
Offline

Amigo, para as aplicacoes que desenvolvo para uma instituicao financeira é feita o seguinte:
a) cria-se um classe UsuarioBen onde lá esta todos os dados do usuario, bem como o tipo. (No nosso caso, ele vai buscar os dados no LDAP, logico q isso acontece quando ja foi feita a autenticacao que vc define nos seus xml o grupo do usuario)
b) se estiver usando Struts, criou-se uma classe abstrata(AbstractAction) onde tem o metodo principal das Action (execute) que verifica se o usuario esta null e se tiver, vai buscar no LDAP. Tambem verifica se a sessa expirou, ai mostra a pagina dizendo q Sessao Expirada. Logar Novamente. Faz o log tambem. E por ultimo (se tiver tudo ok, usuario, sessao e etc), nesse metodo chama-se o metodo executeFunc, onde esse metodo nessa classe é abstrata. Todas as actions das funcionalidades herdam a classe AbstractAction e herdando dessa classe, tem que criar o executeFunc para cada action. Portanto, toda vez que chama alguma funcionalidade, ele verifica o usuario, faz o log, verifica se a sessa expirou e etc.
4) Nas paginas jsp, utliza-se o html:logic no UsuarioBean e dependendo do tipo do Usuario mostra ou nao um link ou uma imagem.

Espero ter ajudado

Certificacoes:
SCWCD - 88%
SCJP - 70%
SCJA - 80%
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

jmizutani wrote:b) se estiver usando Struts,...


Não era mais fácil usar um Servlet Filter?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jmizutani
Thread.start()

Membro desde: 18/05/2006 11:53:49
Mensagens: 26
Offline

Concordo contigo Daniel. Porem isso para aplicacoes que nao são muito dependentes de performance, principalmente para uma aplicacao que é acessada em todo Brasil

Certificacoes:
SCWCD - 88%
SCJP - 70%
SCJA - 80%
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

E qual a diferença?

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jmizutani
Thread.start()

Membro desde: 18/05/2006 11:53:49
Mensagens: 26
Offline

O filtro executa em ordenados stacks ou seja, vai executando e repassando para outros filtros (caso tiver mais de um). Isso pode ser besteira, mas numa aplicacao de grande porte, faz diferenca.

Certificacoes:
SCWCD - 88%
SCJP - 70%
SCJA - 80%
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Não vejo qual porque faria diferença, já que geralmente os conteiners web utilizam um pool de objetos criados e não ficam instanciando objetos a cada nova requisição.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jmizutani
Thread.start()

Membro desde: 18/05/2006 11:53:49
Mensagens: 26
Offline

Sim...concordo que somente existe uma instancia para cada uma. O problema nao é as instancias, mas a criacao de stacks. Mas se vc imprimir o tempo com relacao as stacks (1 stack e 20 por exemplo) vc vai ver que dá diferenca

Certificacoes:
SCWCD - 88%
SCJP - 70%
SCJA - 80%
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

Nossas aplicações têm muitos clientes espalhados pelo Brasil.

E falar que só tem uma única instância pode não ser verdade. Tem que ver como isso foi implementado no container web.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jmizutani
Thread.start()

Membro desde: 18/05/2006 11:53:49
Mensagens: 26
Offline

Ok, para finalizar a questao nao é instancias...e sim as threads, stacks..performance...
De uma olhada aprofundada em threads, stack e faca simulacoes que vc verá a diferenca. É pequena mas para uma aplicacao de mais de 100 mil conexoes, vc vai ver o servidor fazendo diferenca

Certificacoes:
SCWCD - 88%
SCJP - 70%
SCJA - 80%
kuchma
Moderador
[Avatar]

Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline

jmizutani wrote:Ok, para finalizar a questao nao é instancias...e sim as threads, stacks..performance...
De uma olhada aprofundada em threads, stack e faca simulacoes que vc verá a diferenca. É pequena mas para uma aplicacao de mais de 100 mil conexoes, vc vai ver o servidor fazendo diferenca


Conheco alguma coisa de threads e mesmo assim nao entendi isso que voce ta falando (stacks?). Basicamente, entre o que voce comentou e o que o Daniel comentou a diferenca eh simplesmente: um acha melhor fazer isso com um filtro de Servlet e o outro acha mais interessante fazer numa classe abstrata da qual decendem todas as Actions.

Tudo bem, dependendo do cenario pode-se preferir uma ou outra, mas... performance? No que usar a Action sera mais performatico do que usar o filtro?

Se voce puder elaborar um pouco essa ideia, seria interessante. Talvez eu nao tenha captado algo que voce quis transmitir. Obrigado.


Marcio Kuchma

E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox.
[WWW] [ICQ]
brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

danieldestro wrote:Tem o tal do JAAS para isso, mas dizem ser muito complicado.

Nas aplicações web aqui utilizamos um Servlet Filter que filtra todas as requisições os recursos (*.do do Struts) e verifica a permissão.


Só para confirmar o ServletFilter é um Servlet que fica por cima de outras coisas filtrando e verificando permisões?

Se for não seria o mesmo que eu criar uma camada para filtrar as requisições e verificar permissões?

Em questão ao JAAS pode ser uma boa ideia usar um motor de regra para verificar permissões. Eu so não sabia onde abstrair isso...
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Você está falando de stacks mesmo? Pilhas de invocação?

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
andre_salvati
GUJ Ranger

Membro desde: 02/06/2005 16:28:38
Mensagens: 939
Offline


Servidores Web e Servidores de Aplicação já possuem recursos de autenticação e autorização. Vc atribui papéis (roles) para o contexto de cada requisição que é realizada e o container valida se o requisitante pode ter acesso ao recurso solicitado (autorização).

Dê uma estudada na documentação de sua ferramenta e vc certamente encontratrá informação.

Ajude na criação do StackOverflow em português!!!

http://area51.stackexchange.com/proposals/23539/software-development-in-portuguese?referrer=tI8Uon7RDszY236h5e0UuA2


http://www.empresadigital.inf.br
http://twitter.com/afsalvati
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team