Come creare condizioni basate sul ruolo dell'utente usando JSF / MyFaces?
Domanda
Quali opzioni devo leggere i ruoli dell'utente corrente dalle mie pagine JSP? Sono a conoscenza dell'attributo visibleOnUserRole = " myRole "
sui componenti di Tomahawk, ma ho bisogno di ruoli per cose un po 'più complicate della semplice visibilità.
Soluzione
Il ExternalContext espone l'utente e informazioni sul ruolo.
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");
}
}
Se si utilizza JSF nei servlet, queste informazioni sono associate ai valori esposti da HttpServletRequest .
È possibile utilizzare i bean gestiti per esporre i valori alla vista tramite Lingua delle espressioni .
<f:view>
<h:outputLabel value="#{rolesBean.userPrincipalName}" />
<h:outputLabel value="#{rolesBean.user}" />
<h:outputLabel value="#{rolesBean.manager}" />
</f:view>
Altri suggerimenti
In Java EE 6 (che non era disponibile quando questa domanda è stata posta / risposta), puoi testare i ruoli direttamente dalla variabile request
nel tuo codice Facelets. Questo è super conveniente.
per es.
<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />