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()); + } + + } + }
