Composant JSF de rendu basé sur le rôle d'utilisateur
Comment puis-je rendre les composants JSF basé sur un utilisateur connecté de rôle? Je sais que le contexte externe expose les principes, mais comment dois-je faire le rendu correctement dans JSF? En JSP il serait quelque chose comme
<% isUserInRole(Roles.ADMIN) { %>
<button>Edit!</button>
<% } %>
Comment puis-je écrire cela dans JSF la meilleure façon possible? Ma meilleure supposition est le rendu de l'attribut attaché à un backing bean méthode qui renvoie un booléen, mais ce serait introduire une pertinence backing bean si j'ai à rendre certains éléments de navigation seulement pour les admins...
Glassfish V3.1, JSF 2.x
source d'informationauteur TC1
Vous devez vous connecter pour publier un commentaire.
Si votre
web.xml
est déclaré en tant que Servlet 3.0 (ce qui implicitement se rapporte aux JSP/EL 2.2)alors vous pouvez prendre avantage de pouvoir invoquer des méthodes avec des arguments en EL comme
ExternalContext#isUserInRole()
:À noter que cela nécessite une Servlet 3.0 capable conteneur, mais puisque vous êtes à l'aide de Glassfish 3 (qui prend en charge Servlet 3.0), il devrait fonctionner sans aucun problème.
Notez également que si vous utilisez Facelets au lieu de JSP, alors vous avez la
HttpServletRequest
disponible en#{request}
en EL, permettant ainsi le suivant expression plus courte:En réponse à @wasimbhalli, il y a deux raisons pour lesquelles j'ai constaté que l'expression serait toujours return false:
Du nom de la fonction est sensible à la casse.
rendered="#{facesContext.externalContext.isUserInRole('ADMIN')}"
peut retournerfalse
mais essayezrendered="#{facesContext.externalContext.isUserInRole('admin')}"
ou rendus="#{facesContext.externalContext.isUserInRole('Admin')}".Vous devez définir vos rôles à la fois
web.xml
(ou annotations) et la carte englassfish-web.xml
.Les suivants est la façon de spécifier un rôle dans
web.ml
Les suivants est la façon de mapper l'authentification de groupe pour le rôle dans
glassfish-web.xml
.Dans mon test, il est nécessaire de faire la cartographie de même lorsque les noms sont les mêmes, comme je le démontre dans mon exemple de code. Aussi lors de mes tests, j'ai essayé de définir la cartographie et seulement à définir le rôle dans
web.xml
et ni travaillé. J'ai besoin des deux, en précisant le nom de rôle dans le bon cas.Magasin de rôle dans l'attribut de session et juste de la comparer à l'aide de rendu attribut.
par exemple
rendered="#{yoursessionbean.userRole == Roles.ADMIN}"