Comment créer des conditions basées sur un rôle d'utilisateur à l'aide de JSF / MyFaces?
Question
Quelles sont les options pour lire les rôles de l'utilisateur actuel à partir de mes pages JSP? Je suis conscient de l'attribut visibleOnUserRole = "myRole" sur les composants Tomahawk, mais j'ai besoin de rôles pour des tâches un peu plus compliquées que la simple visibilité.
La solution
Le ExternalContext expose l'utilisateur à informations de rôle.
public class RolesAccess implements Serializable {
public String getUserPrincipalName() {
FacesContext context = FacesContext.getCurrentInstance();
Principal principal = context.getExternalContext().getUserPrincipal();
if(principal == null) {
return null;
}
return principal.getName();
}
public String getUser() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getExternalContext().getRemoteUser();
}
public boolean isManager() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getExternalContext().isUserInRole("manager");
}
}
Si vous utilisez JSF dans des servlets, ces informations correspondent aux valeurs exposées par le HttpServletRequest .
Vous pouvez utiliser des beans gérés pour exposer les valeurs à la vue via le Langage d'expression .
<f:view>
<h:outputLabel value="#{rolesBean.userPrincipalName}" />
<h:outputLabel value="#{rolesBean.user}" />
<h:outputLabel value="#{rolesBean.manager}" />
</f:view>
Autres conseils
Dans Java EE 6 (non disponible lorsque cette question a été posée / résolue), vous pouvez tester les rôles directement à partir de la variable request
de votre code Facelets. C'est super pratique.
ex.
<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />