This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch custos-integration
in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git

commit 8113e9b3ccc06f31a25b66238c5ba2e366200982
Author: Marcus Christie <[email protected]>
AuthorDate: Wed Apr 26 09:51:44 2023 -0400

    Owner of data product has all permissions
---
 .../api/sharing/SimpleSharingManagerImpl.java      |  5 ++--
 .../api/sharing/SimpleSharingManagerImplTest.java  | 32 ++++++++++++++++++++++
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
index 3498e9b..05e26f6 100644
--- 
a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
+++ 
b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImpl.java
@@ -1,5 +1,6 @@
 package org.apache.airavata.datacatalog.api.sharing;
 
+import java.util.Arrays;
 import java.util.Optional;
 
 import org.apache.airavata.datacatalog.api.DataProduct;
@@ -82,10 +83,10 @@ public class SimpleSharingManagerImpl implements 
SharingManager {
         UserEntity user = resolveUser(userInfo);
         DataProductEntity dataProductEntity = resolveDataProduct(dataProduct);
         Query query = entityManager.createNativeQuery("select 1 from " + 
getDataProductSharingView()
-                + " where user_id = :user_id and data_product_id = 
:data_product_id and permission_id = :permission_id");
+                + " where user_id = :user_id and data_product_id = 
:data_product_id and permission_id in :permission_id");
         query.setParameter("user_id", user.getUserId());
         query.setParameter("data_product_id", 
dataProductEntity.getDataProductId());
-        query.setParameter("permission_id", permission.getNumber());
+        query.setParameter("permission_id", 
Arrays.asList(permission.getNumber(), Permission.OWNER.getNumber()));
 
         return query.getResultList().size() > 0;
     }
diff --git 
a/data-catalog-api/server/src/test/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImplTest.java
 
b/data-catalog-api/server/src/test/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImplTest.java
index 74df1c4..fe8240b 100644
--- 
a/data-catalog-api/server/src/test/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImplTest.java
+++ 
b/data-catalog-api/server/src/test/java/org/apache/airavata/datacatalog/api/sharing/SimpleSharingManagerImplTest.java
@@ -5,7 +5,9 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Optional;
+import java.util.Set;
 import java.util.UUID;
 
 import org.apache.airavata.datacatalog.api.DataProduct;
@@ -423,4 +425,34 @@ public class SimpleSharingManagerImplTest {
         assertTrue(simpleSharingManagerImpl.userHasAccess(userB,
                 
DataProduct.newBuilder().setDataProductId(dp3.getExternalId()).build(), 
Permission.READ));
     }
+
+    @Test
+    public void testUserHasAccessOwnerHasAllPermissions() throws 
SharingException {
+
+        UserInfo userA = 
UserInfo.newBuilder().setTenantId("tenantId").setUserId("userA").build();
+        UserEntity testUserA = simpleSharingManagerImpl.resolveUser(userA);
+
+        // Create a data product
+        DataProductEntity dataProductEntity = new DataProductEntity();
+        dataProductEntity.setExternalId(UUID.randomUUID().toString());
+        dataProductEntity.setOwner(testUserA);
+        dataProductEntity.setName("test data product");
+        dataProductRepository.save(dataProductEntity);
+
+        DataProduct dataProduct = DataProduct.newBuilder()
+                .setDataProductId(dataProductEntity.getExternalId()) // only 
need the data product id
+                .build();
+
+        // Grant OWNER access to userA for the data product
+        simpleSharingManagerImpl.grantPermissionToUser(userA, dataProduct, 
Permission.OWNER, userA);
+
+        // Check that owner has all permissions
+        Set<Permission> allPermissions = new 
HashSet<Permission>(Arrays.asList(Permission.values()));
+        allPermissions.remove(Permission.UNRECOGNIZED); // remove the special 
protobuf specific UNRECOGNIZED permission
+        for (Permission permission : allPermissions) {
+            assertTrue(simpleSharingManagerImpl.userHasAccess(userA, 
dataProduct, permission), permission.toString());
+        }
+
+    }
+
 }

Reply via email to