Package org.infoglue.cms.util.workflow

Source Code of org.infoglue.cms.util.workflow.InfoGlueAuthorizationCondition

package org.infoglue.cms.util.workflow;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.infoglue.cms.controllers.kernel.impl.simple.UserControllerProxy;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.security.InfoGlueRole;

import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.Condition;
import com.opensymphony.workflow.WorkflowContext;

/**
* This action checks if the user has a particular role.
*
* @author Mattias Bogeblad
*/

public class InfoGlueAuthorizationCondition implements Condition
{
    private final static Logger logger = Logger.getLogger(InfoGlueAuthorizationCondition.class.getName());

    public boolean passesCondition(Map transientVars, Map args, PropertySet ps)
    {
        boolean passesCondition = true;
       
        try
        {
            WorkflowContext context = (WorkflowContext) transientVars.get("context");
            String roleName = (String)args.get("roleName");
            String userName = (String)args.get("userName");
           
            logger.info("passesCondition.............");
            logger.info("caller:" + context.getCaller());
            logger.info("roleName:" + roleName);
            logger.info("userName:" + userName);
           
            InfoGluePrincipal principal = UserControllerProxy.getController().getUser(context.getCaller());
           
            if(userName != null && userName.length() > 0 && !principal.getName().equals(userName))
                passesCondition = false;
           
            if(roleName != null && roleName.length() > 0)
            {
                boolean hasRole = false;
              List roles = principal.getRoles();
              Iterator rolesIterator = roles.iterator();
              while(rolesIterator.hasNext())
              {
                  InfoGlueRole role = (InfoGlueRole)rolesIterator.next();
                  if(role.getName().equalsIgnoreCase(roleName))
                      hasRole = true;
              }
             
              if(!hasRole)
                  passesCondition = false;
            }           
        }
        catch (Exception e)
        {
            logger.error("A severe error occurred when checking workflow authorization:" + e.getMessage(), e);
        }
       
        return passesCondition;
    }
}
TOP

Related Classes of org.infoglue.cms.util.workflow.InfoGlueAuthorizationCondition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.