From 5a93ccc1267b067ad248b0d2be862cdb86c78a49 Mon Sep 17 00:00:00 2001 From: Richard Millet Date: Fri, 8 Feb 2013 13:22:14 -0800 Subject: [PATCH] PAHMA-388: Fixing an AuthN/AuthZ import task failure when reimporting over existing data. --- services/authorization-mgt/import/build.xml | 2 +- .../common/security/SecurityUtils.java | 4 ++- .../common/storage/jpa/JpaStorageUtils.java | 30 +++++++++++++------ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/services/authorization-mgt/import/build.xml b/services/authorization-mgt/import/build.xml index 4a8308313..dc6f43193 100644 --- a/services/authorization-mgt/import/build.xml +++ b/services/authorization-mgt/import/build.xml @@ -124,7 +124,7 @@ - + diff --git a/services/common/src/main/java/org/collectionspace/services/common/security/SecurityUtils.java b/services/common/src/main/java/org/collectionspace/services/common/security/SecurityUtils.java index 796b1dbce..801662340 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/security/SecurityUtils.java +++ b/services/common/src/main/java/org/collectionspace/services/common/security/SecurityUtils.java @@ -39,6 +39,7 @@ import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; import org.collectionspace.authentication.AuthN; +import org.collectionspace.authentication.spi.AuthNContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -258,7 +259,8 @@ public class SecurityUtils { } if (tenantId != null) { - if (ADMIN_TENANT_ID.equals(tenantId) == true) { + if (ADMIN_TENANT_ID.equals(tenantId) == true || + AuthNContext.ANONYMOUS_TENANT_ID.equals(tenantId)) { result = true; } } diff --git a/services/common/src/main/java/org/collectionspace/services/common/storage/jpa/JpaStorageUtils.java b/services/common/src/main/java/org/collectionspace/services/common/storage/jpa/JpaStorageUtils.java index 7a737a35b..c515451a6 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/storage/jpa/JpaStorageUtils.java +++ b/services/common/src/main/java/org/collectionspace/services/common/storage/jpa/JpaStorageUtils.java @@ -69,6 +69,17 @@ public class JpaStorageUtils { // This is the column name for ID field of all the JPA objects public static final String CSID_LABEL = "csid"; + private static boolean useTenantId(String tenantId) { + boolean result = true; + + boolean csAdmin = SecurityUtils.isCSpaceAdmin(); + if (csAdmin == true || tenantId == null) { + result = false; + } + + return result; + } + public static Object getEntity(String id, Class entityClazz) throws DocumentNotFoundException { EntityManagerFactory emf = null; @@ -305,18 +316,18 @@ public class JpaStorageUtils { throw new IllegalArgumentException("tenantId is required"); } + boolean useTenantId = useTenantId(tenantId); StringBuilder queryStrBldr = new StringBuilder("SELECT a FROM "); queryStrBldr.append(entityName); queryStrBldr.append(" a"); queryStrBldr.append(" WHERE " + key + " = :" + key); - boolean csAdmin = SecurityUtils.isCSpaceAdmin(); - if (!csAdmin) { + if (useTenantId == true) { queryStrBldr.append(" AND tenantId = :tenantId"); } String queryStr = queryStrBldr.toString(); //for debugging Query q = em.createQuery(queryStr); q.setParameter(key, value); - if (!csAdmin) { + if (useTenantId == true) { q.setParameter("tenantId", tenantId); } result = q.getSingleResult(); @@ -343,20 +354,20 @@ public class JpaStorageUtils { throw new IllegalArgumentException("key names are required"); } + boolean useTenantId = useTenantId(tenantId); StringBuilder queryStrBldr = new StringBuilder("SELECT a FROM "); queryStrBldr.append(entityName); queryStrBldr.append(" a"); queryStrBldr.append(" WHERE " + key1 + " = :" + key1); queryStrBldr.append(" AND " + key2 + " = :" + key2); - boolean csAdmin = SecurityUtils.isCSpaceAdmin(); - if (!csAdmin && tenantId != null) { + if (useTenantId == true) { queryStrBldr.append(" AND tenantId = :tenantId"); } String queryStr = queryStrBldr.toString(); //for debugging Query q = em.createQuery(queryStr); q.setParameter(key1, value1); q.setParameter(key2, value2); - if (!csAdmin) { + if (useTenantId == true) { q.setParameter("tenantId", tenantId); } result = q.getSingleResult(); @@ -431,8 +442,9 @@ public class JpaStorageUtils { queryStrBldr.append(entityName); queryStrBldr.append(" a"); queryStrBldr.append(" WHERE csid = :csid"); - boolean csAdmin = SecurityUtils.isCSpaceAdmin(); - if (!csAdmin) { + + boolean useTenantId = useTenantId(tenantId); + if (useTenantId == true) { queryStrBldr.append(" AND tenantId = :tenantId"); } emf = getEntityManagerFactory(); @@ -440,7 +452,7 @@ public class JpaStorageUtils { String queryStr = queryStrBldr.toString(); //for debugging Query q = em.createQuery(queryStr); q.setParameter("csid", id); - if (!csAdmin) { + if (useTenantId) { q.setParameter("tenantId", tenantId); } o = q.getSingleResult(); -- 2.47.3