/* * Copyright 2013 GiavaCms.org. * * Licensed under the Eclipse Public License version 1.0, available at * http://www.eclipse.org/legal/epl-v10.html */ package org.giavacms.common.util; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import org.giavacms.common.controller.AbstractPermissionController; /** * Funzioni facelets per i permessi. * */ public class PermissionUtils { /** * metodo da associare a una funzione facelets per scrivere cose del tipo * * <h:outputText value="XXX" rendered="#{fn:permit('SELECT_CLIENT')}" * * e ottenere la visualizzazione/nascondimento di parti di pagina * */ public static boolean permit(String op) { AbstractPermissionController sph = (AbstractPermissionController) BeanUtils .getBean(AbstractPermissionController.class); return sph.checkACL(sph.getPermissions().get(op)); } /** * metodo da associare a una funzione facelets per scrivere cose del tipo * * <h:outputText value="XXX" rendered="#{fn:redirect('SELECT_CLIENT')}" * * e ottenere il redirect su altre pagine in caso il ruolo previsto dalla ACL corrispondente non sia assunto * dall'utente corrente */ public static void redirect(String acl) { AbstractPermissionController sph = (AbstractPermissionController) BeanUtils .getBean(AbstractPermissionController.class); redirectTo(acl, sph.getRedirectUrl()); } public static void redirectTo(String acl, String to) { AbstractPermissionController sph = (AbstractPermissionController) BeanUtils .getBean(AbstractPermissionController.class); if (acl == null || "".equals(acl)) { return; } if (to == null || to.isEmpty()) { to = sph.getRedirectUrl(); } for (String a : acl.split(",")) { if (sph.checkACL(sph.getPermissions().get(a.trim()))) return; } try { ExternalContext extCtx = FacesContext.getCurrentInstance() .getExternalContext(); extCtx.redirect(extCtx.encodeActionURL(JSFUtils.getAbsolutePath() + "/" + to)); } catch (Exception e) { e.printStackTrace(); // Se siamo qui il redirect è fallito. // A questo punto, piuttosto che lasciare andare l'utente dove // non deve.. runtime exception! throw new RuntimeException("Accesso non consentito"); } } /** * metodo da associare a una funzione facelets per scrivere cose del tipo * * <h:outputText value="XXX" rendered="#{fn:redirectByRoles('USER_ADMIN')}" * * e ottenere il redirect su altre pagine in caso il ruolo indicato non sia assunto dall'utente corrente */ public static void redirectByRoles(String roles) { AbstractPermissionController sph = (AbstractPermissionController) BeanUtils .getBean(AbstractPermissionController.class); redirectByRolesTo(roles, sph.getRedirectUrl()); } public static void redirectByRolesTo(String roles, String to) { AbstractPermissionController sph = BeanUtils .getBean(AbstractPermissionController.class); if (roles == null || "".equals(roles)) { return; } if (to == null || to.isEmpty()) { to = sph.getRedirectUrl(); } for (String role : roles.split(",")) { if (sph.isUserInRole(role.trim())) return; } // ultima chance if (sph.getDevelopment()) { for (String role : roles.split(",")) if (sph.getLoginAlias() != null && sph.getLoginAlias().equals(role.trim())) return; } try { ExternalContext extCtx = FacesContext.getCurrentInstance() .getExternalContext(); extCtx.redirect(extCtx.encodeActionURL(JSFUtils.getAbsolutePath() + "/" + to)); } catch (Exception e) { e.printStackTrace(); // Se siamo qui il redirect è fallito. // A questo punto, piuttosto che lasciare andare l'utente dove // non deve.. runtime exception! throw new RuntimeException("Accesso non consentito"); } } }