From c2f869cc453a8dcaf7735abf190893d8e0d1665e Mon Sep 17 00:00:00 2001 From: j2blake Date: Sun, 8 Jan 2012 23:20:02 +0000 Subject: [PATCH] NIHVIVO-3523 Create HasPermissionSet identifier -- not needed, but helps in diagnostics. --- .../identifier/common/HasPermissionSet.java | 74 +++++++++++++++++++ .../factory/HasPermissionSetFactory.java | 45 +++++++++++ .../policy/setup/CommonPolicyFamilySetup.java | 2 + 3 files changed, 121 insertions(+) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/HasPermissionSet.java create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/factory/HasPermissionSetFactory.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/HasPermissionSet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/HasPermissionSet.java new file mode 100644 index 000000000..e39273ed9 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/HasPermissionSet.java @@ -0,0 +1,74 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.auth.identifier.common; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import edu.cornell.mannlib.vitro.webapp.auth.identifier.Identifier; +import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle; +import edu.cornell.mannlib.vitro.webapp.auth.permissions.Permission; +import edu.cornell.mannlib.vitro.webapp.beans.PermissionSet; + +/** + * The current user has this Permission, through one or more PermissionSets. + */ +public class HasPermissionSet extends AbstractCommonIdentifier implements + Identifier, Comparable { + public static Collection getIdentifiers(IdentifierBundle ids) { + return getIdentifiersForClass(ids, HasPermission.class); + } + + public static Collection getPermissions(IdentifierBundle ids) { + Set set = new HashSet(); + for (HasPermission id : getIdentifiers(ids)) { + set.add(id.getPermission()); + } + return set; + } + + private final PermissionSet permissionSet; // never null + + public HasPermissionSet(PermissionSet permissionSet) { + if (permissionSet == null) { + throw new NullPointerException("permissionSet may not be null."); + } + this.permissionSet = permissionSet; + } + + public PermissionSet getPermissionSet() { + return permissionSet; + } + + @Override + public String toString() { + return "HasPermissionSet[" + permissionSet.getLabel() + "]"; + } + + @Override + public int hashCode() { + return permissionSet.getUri().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof HasPermissionSet)) { + return false; + } + HasPermissionSet that = (HasPermissionSet) obj; + return this.permissionSet.getUri().equals(that.permissionSet.getUri()); + } + + @Override + public int compareTo(HasPermissionSet that) { + return this.permissionSet.getUri().compareTo( + that.permissionSet.getUri()); + } +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/factory/HasPermissionSetFactory.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/factory/HasPermissionSetFactory.java new file mode 100644 index 000000000..4d4b397d0 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/factory/HasPermissionSetFactory.java @@ -0,0 +1,45 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.auth.identifier.factory; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; +import edu.cornell.mannlib.vitro.webapp.auth.identifier.ArrayIdentifierBundle; +import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle; +import edu.cornell.mannlib.vitro.webapp.auth.identifier.common.HasPermissionSet; +import edu.cornell.mannlib.vitro.webapp.beans.PermissionSet; +import edu.cornell.mannlib.vitro.webapp.beans.UserAccount; + +/** + * Figure out what PermissionSets the user is entitled to have. + */ +public class HasPermissionSetFactory extends BaseIdentifierBundleFactory { + private static final Log log = LogFactory + .getLog(HasPermissionFactory.class); + + public HasPermissionSetFactory(ServletContext ctx) { + super(ctx); + } + + @Override + public IdentifierBundle getIdentifierBundle(HttpServletRequest req) { + IdentifierBundle ids = new ArrayIdentifierBundle(); + UserAccount user = LoginStatusBean.getCurrentUser(req); + if (user != null) { + + for (String psUri: user.getPermissionSetUris()) { + PermissionSet ps = uaDao.getPermissionSetByUri(psUri); + if (ps != null) { + ids.add(new HasPermissionSet(ps)); + } + } + } + return ids; + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/policy/setup/CommonPolicyFamilySetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/policy/setup/CommonPolicyFamilySetup.java index b3e2d1d9f..729ee4ad0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/policy/setup/CommonPolicyFamilySetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/policy/setup/CommonPolicyFamilySetup.java @@ -9,6 +9,7 @@ import javax.servlet.ServletContextListener; import edu.cornell.mannlib.vitro.webapp.auth.identifier.ActiveIdentifierBundleFactories; import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundleFactory; import edu.cornell.mannlib.vitro.webapp.auth.identifier.factory.HasPermissionFactory; +import edu.cornell.mannlib.vitro.webapp.auth.identifier.factory.HasPermissionSetFactory; import edu.cornell.mannlib.vitro.webapp.auth.identifier.factory.HasProfileOrIsBlacklistedFactory; import edu.cornell.mannlib.vitro.webapp.auth.identifier.factory.HasProxyEditingRightsFactory; import edu.cornell.mannlib.vitro.webapp.auth.identifier.factory.IsRootUserFactory; @@ -38,6 +39,7 @@ public class CommonPolicyFamilySetup implements ServletContextListener { factory(ctx, new IsUserFactory(ctx)); factory(ctx, new IsRootUserFactory(ctx)); factory(ctx, new HasProfileOrIsBlacklistedFactory(ctx)); + factory(ctx, new HasPermissionSetFactory(ctx)); factory(ctx, new HasPermissionFactory(ctx)); factory(ctx, new HasProxyEditingRightsFactory(ctx)); } catch (Exception e) {