0 Replies Latest reply on Aug 4, 2011 8:03 PM by cooper_lyt

    Solve  GateIn s:hasRole Always false

    cooper_lyt

      i use GateIn 3.2.0 M01 and  PortLet Bridge 2.1.0.FINAL

         s:hasRole Always return false

       

      i solve is override class PortalIdentity

       

       

      make  GateIn GateInOrganization Component class:

      package com.dgsoft.comm.authentication;
      
      
      import org.exoplatform.container.PortalContainer;
      import org.exoplatform.container.component.ComponentRequestLifecycle;
      import org.exoplatform.container.component.RequestLifeCycle;
      import org.exoplatform.services.organization.Group;
      import org.exoplatform.services.organization.OrganizationService;
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.annotations.intercept.BypassInterceptors;
      import org.jboss.seam.log.Log;
      
      
      import javax.faces.context.FacesContext;
      import java.util.ArrayList;
      import java.util.Collection;
      import java.util.List;
      
      
      /**
       * Created by IntelliJ IDEA.
       * User: cooper
       * Date: 7/29/11
       * Time: 8:25 AM
       * To change this template use File | Settings | File Templates.
       */
      @Name("com.dgsoft.comm.authentication.gateInOrganization")
      @BypassInterceptors
      @Scope(ScopeType.STATELESS)
      public class GateInOrganization {
      
      
          @Logger
          Log log;
      
      
          public String getGateUserName() {
              FacesContext facesContext = FacesContext.getCurrentInstance();
              return facesContext.getExternalContext()
                      .getRemoteUser();
          }
      
      
          public boolean hasGroup(String groupId) {
              for (String group : getGateInGroupIds()) {
                  if (group.equals(groupId)) {
                      return true;
                  }
              }
              return false;
          }
      
      
          public Collection<String> getGateInGroupIds() {
              List<String> result = new ArrayList<String>();
              for (Group group : getGateInGroups()) {
                  //log.debug("group:" + group.getGroupName() + ";id:"  + group.getParentId());
                  result.add(group.getId());
              }
              return result;
          }
      
      
          public Collection<Group> getGateInGroups() {
              PortalContainer manager = PortalContainer.getInstance();
              OrganizationService service_ = (OrganizationService) manager
                      .getComponentInstanceOfType(OrganizationService.class);
              RequestLifeCycle.begin((ComponentRequestLifecycle) service_);
              try {
                  return service_.getGroupHandler().findGroupsOfUser(getGateUserName());
              } catch (Exception e) {
                  log.error(e.getMessage(), e);
              } finally {
                  RequestLifeCycle.end();
              }
              return new ArrayList(0);
          }
      }
      
      

       

       

      override org.jboss.seam.security.identity

      package com.dgsoft.comm.authentication;
      
      
      import org.jboss.portletbridge.seam.PortalIdentity;
      import org.jboss.seam.Component;
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.*;
      import org.jboss.seam.annotations.intercept.BypassInterceptors;
      
      
      /**
       * Created by IntelliJ IDEA.
       * User: cooper
       * Date: 7/29/11
       * Time: 8:21 AM
       * To change this template use File | Settings | File Templates.
       */
      
      
      @SuppressWarnings("serial")
      @Name("org.jboss.seam.security.identity")
      @Scope(ScopeType.SESSION)
      @BypassInterceptors
      @Install(precedence = 11, classDependencies = "javax.portlet.Portlet")
      @Startup
      public class GateInIdentity extends PortalIdentity {
      
      
          @Override
          public boolean hasRole(String role) {
              boolean result = super.hasRole(role);
              if (super.isLoggedIn() && !result) {
                  GateInOrganization gateInOrganization = (GateInOrganization) Component.getInstance(GateInOrganization.class);
                  result = gateInOrganization.hasGroup(role);
              }
              return result;
          }
      }
      
      

       

      for jbpm actor:

       

      package com.dgsoft.comm.authentication;
      
      
      import org.jboss.seam.Component;
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.Install;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.annotations.intercept.BypassInterceptors;
      import org.jboss.seam.bpm.Actor;
      
      
      import java.util.Set;
      
      
      /**
       * Created by IntelliJ IDEA.
       * User: cooper
       * Date: 7/29/11
       * Time: 8:44 AM
       * To change this template use File | Settings | File Templates.
       */
      
      
      @Name("org.jboss.seam.bpm.actor")
      @Scope(ScopeType.SESSION)
      @BypassInterceptors
      @Install(dependencies = "org.jboss.seam.bpm.jbpm", precedence = 11)
      public class GateInActor extends Actor {
      
      
          @Override
          public String getId() {
              return ((GateInOrganization) Component.getInstance(GateInOrganization.class)).getGateUserName();
          }
      
      
          private boolean groupIsAdded = false;
      
      
          @Override
          public Set<String> getGroupActorIds() {
              Set<String> result = super.getGroupActorIds();
              if (!groupIsAdded) {
                  result.addAll(((GateInOrganization) Component.getInstance(GateInOrganization.class)).getGateInGroupIds());
                  groupIsAdded = true;
              }
              return result;
          }
      }
      
      

       

       

      add jar i usr maven in pom:

       

              <dependency>
                  <groupId>org.exoplatform.core</groupId>
                  <artifactId>exo.core.component.organization.api</artifactId>
                  <version>2.4.0-CR2</version>
                  <scope>provided</scope>
              </dependency>
      
      

       

       

      now it's work.