Boa noite,
tenho uma aplicação JSF/Facelets/EJB na qual estou utilizando o JAAS. O acesso (ou a negação deste) às páginas e aos EJB por diferentes papéis está funcionando a contento. O único problema é como montar o menu da aplicação (residindo em um template Facelets) mostrando apenas as opções às quais o usuário tem acesso.
As duas soluções que encontrei e que funcionaram foi:
1- colocar os papéis em elementos <f:attribute> dos <h:commandLink>, do tipo
<h:commandLink ....>
<f:attribute name="roles" value="admin,usuario"/>
</h:commandLink> e espalhar binding e rendered em todos os links para que o managed bean responda quem será renderizado e quem não.
2- Criar três versões (pois temos, neste sistema, três papéis) do menu no template e renderizá-los seletivamente.
Não considero nenhuma das duas opções é particularmente boa. Exigem código demais, ferem o princípio do DRY (Don’t Repeat Yourself), são extremamente hardcoded.
Tentei criar um componente mas não consegui fazer passar o atributo action.
Alguém teria uma solução mais inteligente pra isto (ou sabe criar um componente que estenda UICommand)?
Obrigado.