| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 14:12:21
|
Emerson Macedo
Virtual Machine Man
![[Avatar]](/images/avatar/360c19682e81f21d55846685c1701179.jpg)
Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline
|
Alguém sabe me dizer se conceitualmente as classes que dizem respeito a autenticação e autorização de uma aplicação fazem parte ou não do domain model de um sistema ? Ex: Usuario, Perfil, Aplicacao, etc. Apesar de a autenticação/autorização poder ser independente da opção utilizada para a sua camada de apresentação (Swing, Web, Mobile, ou até memso todas elas) eu também não vejo essas classes como negócio da aplicação e sim como infraestrutura, segurança, sei lá o que ... alguém poderia contribuir nesse assunto ?
OBS: Nada de questionamentos sobre não estar utilizando segurança declarativa pois não é o caso.
|
Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com
"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 17:05:15
|
ffranceschi
JavaChild
![[Avatar]](/images/avatar/c80bfa00454a7564c07c0559808294fa.jpg)
Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline
|
Eu acredito também que o modelo de domínio deva conter apenas negócio e os dados deveriam chegar corretos para ela, mas se voce tiver um sistema acessados por varios clientes, como voce citou (web, swing e etc) como voce garantiria a autorizacao e autenticacao desse usuario sem ter uma autenticacao numa camada servico ou fachada? Talvez usando AOP seria bem interessante...
|
Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 17:48:04
|
Emerson Macedo
Virtual Machine Man
![[Avatar]](/images/avatar/360c19682e81f21d55846685c1701179.jpg)
Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline
|
Mas a dúvida não é essa. A dúvida é se essas classes são ou não classes de Domain Model do sistema. Colocar uma fachada ou não seria outra discussão (Acho que deve ter sim).
|
Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com
"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 18:01:09
|
ffranceschi
JavaChild
![[Avatar]](/images/avatar/c80bfa00454a7564c07c0559808294fa.jpg)
Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline
|
Estou estudando isso a um pouco tempo e fachada, e pelo que vi, fachada nao faz parte do modelo de dominio, entao pra sistemas com varios tipos de cliente usaria como fachada. Já pra sistema com apenas um cliente (web por exemplo) faria com validacao na camada de apresentacao. Mas resumindo sua pergunta, eu IMHO nao acho que é classe de modelo de dominio... mas...
|
Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 18:44:15
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Olá,
Nada impede que uma Façade faça parte do Domain Model. Façade, Observer e estes padrões mais 'core' não dizem respeito á organizaçãod e código e simplesmente modelam interações e comportamentos entre componentes de software, sem relação com cotnexto onde está inserido.
Normalmente requisitos de autenticação/autorização são ortogonais ao sistema e atualmente o que utiliza apra este tipo de funcionalidade é AOP, seja manualmente ou atraveś de um framework.
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 18:56:04
|
ffranceschi
JavaChild
![[Avatar]](/images/avatar/c80bfa00454a7564c07c0559808294fa.jpg)
Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline
|
Facade nao seria apenas uma camada de frente para gerenciar servicos e modelos de dominio e encapsular da camada de apresentacao o que é feito? Poderia explicar melhor essa colocacao?
|
Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 19:18:13
|
psevestre
JavaEvangelist
Membro desde: 13/05/2005 12:53:19
Mensagens: 432
Localização: São Paulo
Offline
|
No mundo ideal, Usuário/Perfil/Grupo/Aplicação seriam as classes do domínio de uma aplicação de gerenciamento de usuários, possivelmente que operasse como o back-end para prover serviços de SSO através das aplicações existentes.
Se vc. se vê com classes deste tipo no modelo de domínio de uma aplicação em particular, é um sinal de alerta: será que isto deveria estar aí ?
Por outro lado, é provavelmente correto ter uma entidade que possua informações e/ou métodos de um "participante" de um processo de negócio.
IMO, a chave aí é ter a provisão para determinar quem é o participante de um processo de negócio vinculado a um usuário do sistema. Este mapeamento é um bom candidato a ficar isolado em um serviço definido por uma interface. A interface deve permitir associar um usuário ao identificador de participante e ao sistema. Quando houver necessidade de se implementar uma função de negócio que dependa de quem está fazendo a solicitação, utiliza-se outro método que, dado o usuário e o sistema, retorne o identificador de participante - e aí pode ser utilizado para determinar se a operação será executada ou não.
Por exemplo: Imagine um sistema de aprovação de despesas, com um caso de uso "aprovar despesa" onde especifica-se que a despesa só pode ser aprovada por um supervisor se o valor for menor do que a alçada definida para o mesmo. Caso contrário deve ser aprovada por um gerente.
"supervisor" e "gerente" podem ser mapeados por roles e determinados em tempo de execução via segurança declarativa e, portanto, não são problema. A questão no caso é determinar a alçada do usuário corrente. Esta é uma informação de negócio que pertence à aplicação de reembolso e, portanto, deve estar lá em algum lugar. É aí que entra o conceito de "participante". Se vc. for pensar, ele é uma espécie de "proxy" do usuário da plataforma de execução dentro do seu sistema.
Voltando ao exemplo, o pseudo-código para o caso de uso de aprovação seria algo assim:
1. Obtem o usuário de plataforma atual
2. chama o serviço de mapeamento e obtem o identificador de participante
3. obtem o participante utilizando o identificador
4. obtem o valor da alçada
5. se valor < alçada, prossegue. Caso contrário impede o acesso.
|
http://justaphilpicks.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 19:23:42
|
Emerson Macedo
Virtual Machine Man
![[Avatar]](/images/avatar/360c19682e81f21d55846685c1701179.jpg)
Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline
|
Shoes,
Me desculpe a ignorância mas não entendi quando você disse que são ortogonais ao sistema e sobre a solução de AOP para login de um sistema. Poderia explicar melhor ?
PS: Não saco de AOP ainda
|
Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com
"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/05/2007 19:36:08
|
Emerson Macedo
Virtual Machine Man
![[Avatar]](/images/avatar/360c19682e81f21d55846685c1701179.jpg)
Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline
|
psevestre wrote:
No mundo ideal, Usuário/Perfil/Grupo/Aplicação seriam as classes do domínio de uma aplicação de gerenciamento de usuários, possivelmente que operasse como o back-end para prover serviços de SSO através das aplicações existentes.
Ok. Porém não é o meu caso. Meu sistema não gerencia usuários. Apenas utiliza dos dados que já existem em outro sistema que faz essa gerência mas esse sistema não me provê esse serviço de autenticação/autorização.
psevestre wrote:
Se vc. se vê com classes deste tipo no modelo de domínio de uma aplicação em particular, é um sinal de alerta: será que isto deveria estar aí ?
Mesma resposta acima.
psevestre wrote:
Por outro lado, é provavelmente correto ter uma entidade que possua informações e/ou métodos de um "participante" de um processo de negócio.
Esse sim é o meu caso. Ai eu entendo que seriam as classes Usuário, Perfil, Recurso por exemplo. Porém elas são classes do Domain Model do meu sistema ? Acho que não.
psevestre wrote:
IMO, a chave aí é ter a provisão para determinar quem é o participante de um processo de negócio vinculado a um usuário do sistema. Este mapeamento é um bom candidato a ficar isolado em um serviço definido por uma interface. A interface deve permitir associar um usuário ao identificador de participante e ao sistema. Quando houver necessidade de se implementar uma função de negócio que dependa de quem está fazendo a solicitação, utiliza-se outro método que, dado o usuário e o sistema, retorne o identificador de participante - e aí pode ser utilizado para determinar se a operação será executada ou não.
Ok. Essa interface que você esta falando seria uma fachada de serviço isso eu já sei (alias eu sei o princípio de fazer login em um sistema. Não estou sendo irônico )
psevestre wrote:
É aí que entra o conceito de "participante". Se vc. for pensar, ele é uma espécie de "proxy" do usuário da plataforma de execução dentro do seu sistema.
Você acha que no meu sistema eu poderia considerar essas classes como proxies ? Desculpe não entendi muito bem. Você poderia explicar melhor ?
|
Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com
"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 00:07:38
|
psevestre
JavaEvangelist
Membro desde: 13/05/2005 12:53:19
Mensagens: 432
Localização: São Paulo
Offline
|
Esse sim é o meu caso. Ai eu entendo que seriam as classes Usuário, Perfil, Recurso por exemplo. Porém elas são classes do Domain Model do meu sistema ? Acho que não.
Não são mesmo. Elas fazem parte do domínio do outro sistema que vc. mencionou.
psevestre wrote:
Ok. Essa interface que você esta falando seria uma fachada de serviço isso eu já sei (alias eu sei o princípio de fazer login em um sistema. Não estou sendo irônico  )
Acho que vc. pegou a idéia (tb. sem ironia !), mas não estou falando de login, certo ? O login em si está fora do escopo dos _dois_ sistemas.
Você acha que no meu sistema eu poderia considerar essas classes como proxies ? Desculpe não entendi muito bem. Você poderia explicar melhor ?
Usei o termo "proxy" de forma um tanto liberal. A idéia é que no seu sistema vc. tenha uma classe que represente um participante de um processo de negócio. Esta classe deve possuir um identificador que possa ser recuperado a partir da informação de login que existe no contexto de execução de determinado caso de uso, usando para tanto o serviço de mapeamento ao qual me referi - e que, no seu caso iria consultar o sistema de segurança.
Outras informações relativas ao seu sistema vão parar nesta classe tb, tal como, no exemplo que dei, o valor de alçada para aprovação de uma despesa.
Por quê esta classe no seu sistema ? Veja, o sistema de segurança pode não ser baseado em um back-end relacional - pense em LDAP, p.ex. Embora até exista um driver jdbc para LDAP, vc _não_ vai querer fazer joins entre o LDAP e o banco relacional onde os dados do seu sistema irão parar, certo ?
|
http://justaphilpicks.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2007 14:45:20
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
Se você usa Spring, dê uma olhada no Acegi Security. Ele faz segurança dos objetos de domain usando AOP e é relativamente simples de usar, principalmente se você usar annotations.
[]'s
Rodrigo Auler
|
|
|
 |
|
|