Melhor maneira para implementar niveis de acesso com J2SE

Boa tarde,

Tenho uma aplicação legada, e estou participando de um projeto para portar essa aplicação para java.
Essa aplicação será feita em J2SE com Swing , e ainda não sei quais os frameworks que serão autorizados para a utilização.
Tenho um problema que é , muitas das operações feitas por um usuário no sistema legado, são feitas através de autorização através de níveis de acesso dos mais variados tipos e complexidade.
Gostaria de saber uma maneira legal de implementar em Java, para que meu código fique reutilizavel e compreensivel.
Teria que ser uma maneira onde por exemplo eu mandaria executar um método de incluir, e antes de executar o método de incluir seria executado algum código para verificar se o usuário tem autorização para tal operação.
O Objetivo principal aqui é separar o código de autorização/níveis de acesso do código de negócio e dos DAOS.

Estou pensando em utilizar orientação a aspectos, mas como disse, ainda não sei quais os frameworks e ferramentas serão autorizados para a utilização no projeto,
portanto se alguem souber uma maneira legal utilizando algum pattern que possa resolver esse problema, por favor, informe a idéia de como fazer.

[quote=polaco]Boa tarde,

Tenho uma aplicação legada, e estou participando de um projeto para portar essa aplicação para java.
Essa aplicação será feita em J2SE com Swing , e ainda não sei quais os frameworks que serão autorizados para a utilização.
Tenho um problema que é , muitas das operações feitas por um usuário no sistema legado, são feitas através de autorização através de níveis de acesso dos mais variados tipos e complexidade.
Gostaria de saber uma maneira legal de implementar em Java, para que meu código fique reutilizavel e compreensivel.
Teria que ser uma maneira onde por exemplo eu mandaria executar um método de incluir, e antes de executar o método de incluir seria executado algum código para verificar se o usuário tem autorização para tal operação.
O Objetivo principal aqui é separar o código de autorização/níveis de acesso do código de negócio e dos DAOS.

Estou pensando em utilizar orientação a aspectos, mas como disse, ainda não sei quais os frameworks e ferramentas serão autorizados para a utilização no projeto,
portanto se alguem souber uma maneira legal utilizando algum pattern que possa resolver esse problema, por favor, informe a idéia de como fazer.
[/quote]

Você poderia usar Anotações + Reflections. Já que os dois recursos estão embutidos no Java, acredito que não tem problema em fazer uma solução caseira pra isso.

[]´s

Reflection (no caso do Spring) nada mais é do que uma implementação do padrão proxy, onde, para cada objeto dentro do sistema é criado outro que funcione como um envelope ao redor dele, e que pode fazer coisas do tipo dessas (controle de acesso, auditoria…), e possui regras para “capturar” ou não a execução de um método. Ou seja, para usar isso, você deveria criar um padrão de nomeclatura para métodos que possuem controle de acesso, e especificar que esses métodos seriam capturados pelo POA do Spring. O problema que eu vejo nisso, é que o usuário clica, dá uma Exception no sistema, e ele vê coisas do tipo “Você não está autorizado a ver issso…”, entende?

Imagine uma festa onde para todos os convidados você tem que ir ao quarto do anfitrião (lá dentro) e perguntar se aquele convidado tem permissão, voltar para a entrada e dizer que não/sim.

Aqui na empresa criaram algo chamado de Doorman, que para todas as requisições na montagem de Menus (isso, na view, não no business nem DAO) ele verifica se o usuário possui permissões (se tem ou não, nada de leitura, escrita, ou ambos) e só manda para a view os menus que ele possui autorização para ver. É uma abordagem que funciona a mais de 3 anos, não sei se em seu caso se adequa bem porque você disse permissões “variados tipos e complexidade”. Nessa abordagem o usuário simplesmente não vê aquilo que não tem permissão para ver.

Espero ter ajudado.

[quote=polaco]Boa tarde,

Tenho uma aplicação legada, e estou participando de um projeto para portar essa aplicação para java.
Essa aplicação será feita em J2SE com Swing , e ainda não sei quais os frameworks que serão autorizados para a utilização.
Tenho um problema que é , muitas das operações feitas por um usuário no sistema legado, são feitas através de autorização através de níveis de acesso dos mais variados tipos e complexidade.
Gostaria de saber uma maneira legal de implementar em Java, para que meu código fique reutilizavel e compreensivel.
Teria que ser uma maneira onde por exemplo eu mandaria executar um método de incluir, e antes de executar o método de incluir seria executado algum código para verificar se o usuário tem autorização para tal operação.
O Objetivo principal aqui é separar o código de autorização/níveis de acesso do código de negócio e dos DAOS.
[/quote]

Isso não funciona. Vc precisa habiltiar ou desabilitar o butão ou menu que dá acesso à função. E para isso vc precisa ter um conjunto de classes que lhe permitam saber se o cara tem autorização ou não ( normalmente Usuario + Role + Permission) E depois vc amarra as propriedades de enable a um modelo que consulta esses dados.

Restringir os DAOS… esqueça.

Não ha frameworks para isto. Ha OO e Swing ( que é baseado na tecnologia JavaBeans - estude javabeans subretudo os mecanismos de eventos).

Eu tenho uma aplicação SWING, utilizo objeto DAO para o acesso ao DB, e para o swing “utilizar” o DAO tenho a interface de controle.
Todas os metodos da interface de controle estão com throws Exception, suponho que fazendo as restrições em cima das interface de controle fique bom.

O que vocês acham?