Comment créer des conditions basées sur un rôle d'utilisateur à l'aide de JSF / MyFaces?

StackOverflow https://stackoverflow.com/questions/286686

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é.

Était-ce utile?

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')}" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top