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.