Permissão de Acesso em Swing  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Olá a todos amigos do forum. Estou definindo padrões para o desenvolvimento de um software que será migrado de Delphi para Java. No sistema em Delphi as permissões dos usuários são definidas no campos de um formulário, por exemplo, num sistema de consulta de clientes, eu posso definir quais campos um vendedor pode ver, quais um gerente pode ver, etc. No sistema em Java deverá possuir a mesma funcionalidade, ai é que está o problema, se eu, no momento de criar a interface gráfica, verificar componente por componente se o usuário ter permissão de vê-lo ou não acho que o sistema não terá boa performance.

Vocês tem alguma sugestão do que pode ser feito para fazer estas verificações de permissão mantendo a boa performance do sistema?

Muito obrigado a todos e um feliz ano novo.
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

Pode dar mais um detalhe , é separado por componentes ou por campos ?

Por exemplo você pode fazer um JPanel com dados pra exibir no caso
de ser o gerente , senao apenas mostra os campos em comum..

Você vai ter que construir um "mini-framework" pra fazer isso e o pessoal
utilizar , nao é tao complicado tendo um bom conhecimento e sabendo
o que realmente deve ser feito..

Agora se o sistema for controlado "campo a campo" acho que optar
por uma solucao web é um caso a ser analisado , há muitos frameworks
que oferecem isso pra você prontinho , ( aka , mentawai , jsf , etc..)

Bom nada que um bom papo nao resolva qualquer duvida posta ae..
Boa sorte!

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Não há como fazer em ambiente Web, o sistema é Desktop.

Sim, as permissões são definidas por campo (nome, endereço, etc.). É isto que está complicando (verificar campo por campo de maneira eficiente).

Fale um pouco mais sobre esta idéia do framework? Alguma idéia de como ele pode funcionar?
#rodrigo#
JavaChild
[Avatar]

Membro desde: 17/08/2005 14:40:22
Mensagens: 103
Offline

dá uma olhada neste link, .... quem sabe pode te ajudar em alguma coisa ...

http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/tutorials/index.html



RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Obrigado, vou dar uma olhada aqui sim.

Não sabia que era possível utilizar JAAS sem um servidor de aplicações.
Vou ver se com JAAS é possível fazer o que desejo.

Qualquer dúvida pergunto aqui.
RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Alguém tem mais alguma sugestão de como posso resolver o problema?

Idéias são sempre bem vindas.
Sombriks
Java Ninja
[Avatar]

Membro desde: 14/04/2005 16:36:03
Mensagens: 250
Localização: Fortaleza, CE
Offline

rapaz, perto do que eu estou para usar, seu problema pode ser na realidade uma solução, uma vez q eu vou ter que ver a mesma coisa.

por exemplo, se vc quiser fazer o componente literalmente desaparecer da tela se o usuário não puder mexer naquilo, é recomendável pensar na reestruturação de leiaute, etc. Mas se deixar disabled for opção, uma classe abstrata que 1- tenha uma implementação genérica de campos ou 2- obrigue cada janela a possuir uma certa implementação pode ser útil.

No meu caso, cada usuário tem uma "chave de acesso" (eh um número) e dependendo deste valor certas telas podem ou não serem vistas. mas aí se vc quiser alterações dinâmicas nos forms, bom, a coisa muda um pouco. nesse caso não somente as janelas, mas sim cada campinho, ao ser criado tem que ter uma "contra-chave" pra vc verificar se pode ou não isso ou aquilo.

no meu decidi pela simplicidade e estou usando números primos para definir os níveis de acesso. se, por exemplo, um usuário puder ter aceso a dois níveis distintos de segurança a chave deste cidadão é a multiplicação dos dois primos que representam tal funcionalidade.

se servir pra mim certamente postarei as dificuldades e alegrias de uso, blza?

boa sorte ae.

Linux user #391803.
http://counter.li.org/
RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Eu optei pelo desenvolvimento de um pequeno Framework, visto que ele poderá ser facilmente utilizado, posteriormente, em outros projetos, sem contar que posso disponibilizá-lo como software livre.

Estou seguindo a seguinte idéia: tenho uma classe que herda JFrame e esta possui um método que verifica os componentes anotados para efetuar a validação. O problema que estou enfrentando parece ser simples, mas num pensei em nenhuma solução eficiente, somente em uma básica.

Ao buscar o Field, via reflection, eu preciso convertê-lo para sua classe padrão para definir suas propriedades, como posso fazer isto de maneira performática?

Eu fiz da seguinte forma:


Porém esta não me parece ser a melhor maneira. Alguém possui alguma sugestão de uma maneira mais eficiente para implementar o código?

Obrigado a todos.
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

Opa , esta surgindo uma solucao!

Pense em classes "Abstratas" e "Implementacoes" feitas
por você do JTextField da JTextArea e assim por diante..



Boa sorte!

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
RicardoLuis
JavaEvangelist

Membro desde: 12/08/2003 14:47:56
Mensagens: 393
Localização: Cuiabá / MT
Offline

Com isto poderia tornar o código mais eficiente? Me desculpe, mas não conseguir ver aonde você deseja chegar.
Poderia me dar mais alguns detalhes?

Para verificar as permissões do usuário, estarei fazendo, na minha classe que herda JFrame, um método abstrato que passa o nome do componente, ai nos meus formulários estará a implementação, visto que os objetos que armazenam as permissões somente estarão disponíveis lá. O que acha da solução? Alguma forma de melhorá-la?
bernardo.rafael
Debugger
[Avatar]

Membro desde: 02/06/2006 08:03:51
Mensagens: 66
Offline

Ricardo, vc pode usar uma fábrica de formulários.
Com essa fábrica, vc vai criar um layout para cada nível de usuáro de seu sistema.

Esse tutorial explica o uso de alguns design patterns, entre eles o Factory Method (que eu acredito que vá solucionar o seu problema)
http://www.guj.com.br/java.tutorial.artigo.137.1.guj


-------------------------------------------
Abraços.
Rafael Bernardo
[Email] [MSN]
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

RicardoLuis wrote:Com isto poderia tornar o código mais eficiente? Me desculpe, mas não conseguir ver aonde você deseja chegar.
Poderia me dar mais alguns detalhes?

Uhmn , estou apenas dando a ideia de você criar seus proprios componentes
assim você pode agregar novas funcionalidades a eles nao tendo que usar
JTextField aqui e GujTextField ali.. sacou ?

RicardoLuis wrote:
Para verificar as permissões do usuário, estarei fazendo, na minha classe que herda JFrame, um método abstrato que passa o nome do componente, ai nos meus formulários estará a implementação, visto que os objetos que armazenam as permissões somente estarão disponíveis lá. O que acha da solução? Alguma forma de melhorá-la?

Boa solução! Pode ser que exista alguma melhor , pode ser que não.
Bom tambem aceite a sugestao do Bernardo Rafael e de uma olhada
nos padrões de projeto que ele indicou quem sabe nao esta em algum
deles uma solucao talvez mais simples pro seu problema ?

Bernardo Rafael poderia dar uma breve explicada como poderia ser
utilizado estes padrões sugeridos para solucionar o problema?

Boa Sorte!
[WWW] [MSN]
bernardo.rafael
Debugger
[Avatar]

Membro desde: 02/06/2006 08:03:51
Mensagens: 66
Offline

Na verdade, fazer a sua classe extender o JFrame não é uma boa...

Fazendo isso fará com que seu sistema fique dependente do JFrame e, se em algum momento vc desistir de usar swing para usar awt será um um parto.

O melhor mesmo é vc criar uma classe que monte a toda a tela e a mostre para o usuário.

Assim, se vc quiser mudar a API gráfica de seu sistema, ficará mais simples.

-------------------------------------------
Abraços.
Rafael Bernardo
[Email] [MSN]
keller
GUJ Master
[Avatar]

Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline

Olá,

Que tal em vez de usar classes abstratas para "obrigar"
a implementacao de um metodo porque nao utiliza uma
interface ? É uma saida muito mais elegante.

Boa Sorte!

Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller
[WWW] [MSN]
bernardo.rafael
Debugger
[Avatar]

Membro desde: 02/06/2006 08:03:51
Mensagens: 66
Offline

Um exemplo de uso do Factory Method:

- uma classe abstrata que serviria de base para as outras classes, no caso de uma janela, teriamos uma classe com o nome de 'JanelaBase.java'


- após isso, vc pode gerar quantas classes filhas de 'JabelaBase' quiser, por exemplo:
1º - JanelaVendedor


2º - JanelaGerente


- a partir deste momento, vc já pode começar a fabricar as suas janelas:
JanelaFactory


* aqui, é necessário tomar cuidado de mandar um tipo que possa ser fabricado, ou criar um tipo default para quando o tipo de Janela não for especificado corretamente.


espero que ajude.

-------------------------------------------
Abraços.
Rafael Bernardo
[Email] [MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team