From fc548d8e7a8fc7931e6abc27e8287af42cd28bdc Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Wed, 25 Jul 2012 09:25:03 +0000
Subject: [PATCH] [BIS-137] Use the correct database id for a space id for the
 authorization check.

SVN: 26190
---
 .../predicate/SampleListPredicate.java        |  3 +-
 .../predicate/AbstractSpacePredicate.java     | 32 +++++++------------
 .../ScreeningPlateListReadOnlyPredicate.java  |  5 ++-
 3 files changed, 14 insertions(+), 26 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleListPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleListPredicate.java
index 69f0d8eeee9..56e3abf9347 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleListPredicate.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/predicate/SampleListPredicate.java
@@ -127,8 +127,7 @@ public class SampleListPredicate extends AbstractSpacePredicate<List<Sample>>
                 continue; // Shared samples will return a spaceId of null (or 0 in EoDSQL).
             }
             final Status status =
-                    evaluate(person, allowedRoles, authorizationDataProvider
-                            .getHomeDatabaseInstance(), spaceId);
+                    evaluate(person, allowedRoles, spaceId);
             if (Status.OK.equals(status) == false)
             {
                 return status;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/AbstractSpacePredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/AbstractSpacePredicate.java
index 947924f1cf2..ef665d7e172 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/AbstractSpacePredicate.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/AbstractSpacePredicate.java
@@ -89,18 +89,10 @@ public abstract class AbstractSpacePredicate<T> extends AbstractDatabaseInstance
     }
 
     protected Status evaluate(final PersonPE person, final List<RoleWithIdentifier> allowedRoles,
-            final DatabaseInstancePE databaseInstance, final long spaceTechId)
-    {
-        final String databaseInstanceUUID = databaseInstance.getUuid();
-        return evaluate(person, allowedRoles, databaseInstanceUUID, databaseInstance.getCode(),
-                spaceTechId);
-    }
-
-    protected Status evaluate(final PersonPE person, final List<RoleWithIdentifier> allowedRoles,
-            final String databaseInstanceUUID, final String databaseInstanceCode,
             final long spaceTechId)
     {
-        if (tryFindSpace(databaseInstanceUUID, spaceTechId) == null)
+        final SpacePE space = tryFindSpace(spaceTechId);
+        if (space == null)
         {
             if (okForNonExistentSpaces)
             {
@@ -111,7 +103,8 @@ public abstract class AbstractSpacePredicate<T> extends AbstractDatabaseInstance
             }
         }
 
-        final boolean matching = isMatching(allowedRoles, databaseInstanceUUID, spaceTechId);
+        final boolean matching =
+                isMatching(allowedRoles, space.getDatabaseInstance().getId(), spaceTechId);
         if (matching)
         {
             return Status.OK;
@@ -137,11 +130,11 @@ public abstract class AbstractSpacePredicate<T> extends AbstractDatabaseInstance
         return null;
     }
 
-    private SpacePE tryFindSpace(final String databaseInstanceUUID, final long spaceTechId)
+    private SpacePE tryFindSpace(final long spaceTechId)
     {
         for (final SpacePE space : spaces)
         {
-            if (equalIdentifier(space, databaseInstanceUUID, spaceTechId))
+            if (equalIdentifier(space, spaceTechId))
             {
                 return space;
             }
@@ -172,18 +165,17 @@ public abstract class AbstractSpacePredicate<T> extends AbstractDatabaseInstance
     }
 
     private boolean isMatching(final List<RoleWithIdentifier> allowedRoles,
-            final String databaseInstanceUUID, final long spaceTechId)
+            final long databaseTechId, final long spaceTechId)
     {
         for (final RoleWithIdentifier role : allowedRoles)
         {
             final RoleLevel roleLevel = role.getRoleLevel();
             if (roleLevel.equals(RoleLevel.SPACE)
-                    && equalIdentifier(role.getAssignedSpace(), databaseInstanceUUID,
-                            spaceTechId))
+                    && equalIdentifier(role.getAssignedSpace(), spaceTechId))
             {
                 return true;
             } else if (roleLevel.equals(RoleLevel.INSTANCE)
-                    && role.getAssignedDatabaseInstance().getUuid().equals(databaseInstanceUUID))
+                    && role.getAssignedDatabaseInstance().getId() == databaseTechId)
             {
                 // permissions on the database instance level allow to access all spaces in this
                 // instance
@@ -200,11 +192,9 @@ public abstract class AbstractSpacePredicate<T> extends AbstractDatabaseInstance
                 && space.getDatabaseInstance().getUuid().equals(databaseInstanceUUID);
     }
 
-    private boolean equalIdentifier(final SpacePE space, final String databaseInstanceUUID,
-            final long spaceTechId)
+    private boolean equalIdentifier(final SpacePE space, final long spaceTechId)
     {
-        return (space.getId() == spaceTechId)
-                && space.getDatabaseInstance().getUuid().equals(databaseInstanceUUID);
+        return (space.getId() == spaceTechId);
     }
 
     protected Status evaluateSpace(final PersonPE person,
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/internal/authorization/ScreeningPlateListReadOnlyPredicate.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/internal/authorization/ScreeningPlateListReadOnlyPredicate.java
index 263a3421cf5..e72ee957c54 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/internal/authorization/ScreeningPlateListReadOnlyPredicate.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/internal/authorization/ScreeningPlateListReadOnlyPredicate.java
@@ -69,7 +69,7 @@ public class ScreeningPlateListReadOnlyPredicate extends
                 permIds.add(plate.getPermId());
                 hasPermId = true;
             }
-            
+
             final String spaceCodeOrNull =
                     SpaceCodeHelper.tryGetSpaceCode(person, plate.tryGetSpaceCode());
             if (spaceCodeOrNull == null && hasPermId == false)
@@ -96,8 +96,7 @@ public class ScreeningPlateListReadOnlyPredicate extends
                     continue; // Shared samples will return a spaceId of null (or 0 in EoDSQL).
                 }
                 final Status status =
-                        evaluate(person, allowedRoles, authorizationDataProvider
-                                .getHomeDatabaseInstance(), spaceId);
+                        evaluate(person, allowedRoles, spaceId);
                 if (Status.OK.equals(status) == false)
                 {
                     return status;
-- 
GitLab