Cara, implementei este procedimento aqui na empresa, utiliza alguns cadastros, tais como:
MóduloSistema - Neste ponto eu cadastro possíveis módulos(Financeiro, RH, etc)
MóduloMenu - Cadastro as páginas pertencentes à um Sistema(Neste momento conseguimos montar o menu dinâmico)
MóduloPermissões - Cadastro de permissões por sistema(Genérico, tais como: Inclusão, Alteração, GravarEstadoEspecial, etc…)
MóduloUsuários - Cadastro padrão de usuário com login e senha
MóduloAgrupamento - Cria um grupo “GRUPO MASTER” onde são associadas as permissões “Inclusão”, “Alteração”. Também neste momento efetuo a associação das Páginas. Sendo assim teremos a tabela:
GRUPO MASTER
GRUPO MASTER x TELA.jsp X RH_0001CAD
GRUPO MASTER x TELA.jsp X RH_0002_UPD
GRUPO MASTER x TELA.jsp X RH_0003_VIEW
Depois podemos associar um Grupo ao Usuário, ficando:
GRUPO MASTER x USUARIO1
O Join final ficaria desta forma:
USUARIO1 X RH_0001CAD
USUARIO1 X RH_0002_UPD
USUARIO1 X RH_0003_VIEW
Depois crie views para representação da estrutura do JAAS, join simples e criei o mapeamento em um LoginModule.
A definição de ação no FrontController foi encapsulada para capturar de forma dinâmica as permissões da página corrente e o procedimento de autorização é efetuado através da comparação das permissões do usuário através do request.isUserInRole
Isso é apenas uma simples abordagem sobre o modelo de implementação adotada, neste projeto foi utilizado JSF com JPA e o provider foi o Hibernate.