Qual padrão de projeto devo utilizar?

Olá a todos,

estou modelando uma aplicação seguindo o modelo MVC.

Nesta aplicação, temos que validar os usuários quando estes forem executar uma ação, exemplo:

“1. O sistema verifica se o usuário que está logado tem permissão para poder alterar um departamento.”

Desta forma, eu tenho os meus beans, os DAO e o controlador da aplicação. Em um primeiro momento, em cada chamada de método do controlador, como por exemplo gravarDepartamento(), deve ser feita a validação de permissão do usuário, então eu pensei em fazer a validação dentro deste método. Mas vejo que isso não seria uma boa prática, pois este método deve simplesmente definir como gravar o departamento e não como validar se um usuário tem permissão para isso.

Então comecei a pensar em criar uma classe que faria todas estas validações em métodos específicos e este métodos seriam chamados pelo controlador, ou seja, o método gravarDepartamento() iria ativar o método verificaPermissaoGravarDepartamento().

Bom, aih eh q surge a dúvida: qual padrão devo utilizar para fazer isso?

Obrigado.

O que geralmente é feito em aplicações web e de maneira relativamente simples é utilizar um ServletFilter para interceptar as chamadas HTTP. A partir das URLs, que geralmente representam “Actions” do seu sistema, são verificadas as permissões para prosseguir a solicitação.

Quanto ao Design Pattern, exite um bem antigo chamado Intercepting Filter[Core J2EE] que fala sobre isso.
http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html

Eu tenho um sistema que utiliza esse recurso, eu uso um método com dois tipos de validações do usuário (sei que não pode ser o mais correto e deve existir melhores por aí).

Tenho uma classe Global que implementa apenas um bean Usuario representando o usuário conectado.

Mas no meu caso no momento da montagem dos menus já é desabilitado o acesso a tudo que esse usuário não tem permissão para acessar.

[quote=glauber_rochab]Olá a todos,

estou modelando uma aplicação seguindo o modelo MVC.
[/quote]

hoje em dia, dizer isso é não dizer muito …

Vc está quase lá.
Repare no requisto: o sistema verifica se o usuário tem permissão de alterar departamento.
Básicamente o codigo que vc quer é :


Permission p = DepartementPermission.alter();

if(! user.hasPermission(p) ){
    throw new SecurityException("Access denied");
}

Como a classe User descobre se tem permissão é irrelevante. O ponto é que desta forma
vc pode testar qq tipo de permissão.

Caros amigos…sejamos mais profissionais…(como se eu usasse assim…rss)

http://java.sun.com/javaee/5/docs/tutorial/doc/bncav.html

Talves demore mais para implementar, pois vc precisaria ler o tutorial. Mas vale a pena.

[quote=Giulliano]Caros amigos…sejamos mais profissionais…(como se eu usasse assim…rss)

http://java.sun.com/javaee/5/docs/tutorial/doc/bncav.html

Talves demore mais para implementar, pois vc precisaria ler o tutorial. Mas vale a pena.[/quote]

O uso de JAAS é interessante mas limitado. O interessante não é apenas controlar os roles ,mas controlar as permissões por role.

O legal seria usar EJB com as anotations em cima de cada método dizendo qual role pode usar o método. Foi uma sacada interessante da SUN. Fora isso o máximo que um servidor WEB que segue as especificações da SUN oferece é mapeamento por URL’s.

Já ouvi falar do JAAS, não conheço mas as pessoas que o recomendaram eram de confiança daqui do forum.