Solve GateIn s:hasRole Always false
cooper_lyt Aug 4, 2011 8:03 PMi 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.