You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/06/15 02:46:03 UTC

[airavata-custos] branch develop updated: fix for #207

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

isjarana pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-custos.git


The following commit(s) were added to refs/heads/develop by this push:
     new c1a9921  fix for #207
     new 35e08d7  Merge pull request #208 from isururanawaka/develop
c1a9921 is described below

commit c1a9921ec34b80e728831656b1c7090cc6ae4abd
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon Jun 14 22:43:35 2021 -0400

    fix for #207
---
 .../persistance/repository/SharingRepository.java  |  6 ++
 .../custos/sharing/service/SharingService.java     | 64 ++++++++++++++++------
 2 files changed, 53 insertions(+), 17 deletions(-)

diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
index 4604da4..f2e7cd9 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
@@ -47,6 +47,12 @@ public interface SharingRepository extends JpaRepository<Sharing, String> {
 
 
     @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
+            "and s.sharing_type IN ?3", nativeQuery = true)
+    public List<Sharing> findAllByEntityAndSharingType
+            (long tenantId, String entityId,  List<String> sharingTypes);
+
+
+    @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
             "and s.permission_type_id = ?3 and s.associating_id_type = ?4", nativeQuery = true)
     public List<Sharing> findAllByEntityAndPermissionTypeAndOwnerType
             (long tenantId, String entityId, String permissionTypeId, String associatingIdType);
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
index f2c63bc..bfe1941 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
@@ -504,9 +504,11 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
             List<String> sharingType = new ArrayList<>();
             sharingType.add(Constants.INDIRECT_CASCADING);
-            List<Sharing> sharings = sharingRepository.findAllByEntityAndSharingTypeAndPermissionType(tenantId,
-                    enModel.getId(),
-                    optionalPermissionType.get().getId(), sharingType);
+            sharingType.add(Constants.DIRECT_CASCADING);
+            sharingType.add(Constants.DIRECT_NON_CASCADING);
+
+            List<Sharing> sharings = sharingRepository.findAllByEntityAndSharingType(tenantId,
+                    enModel.getId(), sharingType);
 
 
             if (sharings != null && sharings.size() > 0) {
@@ -597,9 +599,11 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
             }
             List<String> sharingType = new ArrayList<>();
             sharingType.add(Constants.INDIRECT_CASCADING);
+            sharingType.add(Constants.DIRECT_CASCADING);
+            sharingType.add(Constants.DIRECT_NON_CASCADING);
 
-            List<Sharing> sharings = sharingRepository.findAllByEntityAndSharingTypeAndPermissionType(tenantId,
-                    internalEntityId, optionalPermissionType.get().getId(), sharingType);
+            List<Sharing> sharings = sharingRepository.findAllByEntityAndSharingType(tenantId,
+                    internalEntityId, sharingType);
 
             if (sharings != null && sharings.size() > 0) {
                 newEntity.setSharedCount(sharings.size());
@@ -1298,7 +1302,6 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
         if (sharings != null && !sharings.isEmpty()) {
 
-            LOGGER.info("Sharing s found for entity with Id " + internalParentId);
             for (Sharing sharing : sharings) {
                 Sharing newShr = SharingMapper.getNewSharing(sharing, tenantId, entity);
                 newShr.setSharingType(Constants.INDIRECT_CASCADING);
@@ -1380,7 +1383,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
         Optional<org.apache.custos.sharing.persistance.model.PermissionType> optionalOwnerPermissionType =
                 permissionTypeRepository.findByExternalIdAndTenantId(Constants.OWNER, tenantId);
 
-        if (optionalOwnerPermissionType.get().equals(internalPermissionId)) {
+        if (optionalOwnerPermissionType.get().getId().equals(internalPermissionId)) {
             String msg = "Owner permission type can not be assigned";
             LOGGER.error(msg);
             responseObserver.onError(io.grpc.Status.PERMISSION_DENIED.withDescription(msg).asRuntimeException());
@@ -1426,22 +1429,48 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
         }
 
-
         if (!effectiveSharings.isEmpty()) {
             sharingRepository.saveAll(effectiveSharings);
 
+            //revoke other permissions
+            for (String userId : userIds) {
+                List<org.apache.custos.sharing.persistance.model.PermissionType> existingPermissionTypes =
+                        permissionTypeRepository.findAllByTenantId(tenantId);
+
+                existingPermissionTypes.forEach(permission -> {
+                    if (!(permission.getExternalId().equals(Constants.OWNER) || permission.getId().equals(internalPermissionId))) {
+                        sharingRepository.
+                                deleteAllByEntityIdAndPermissionTypeIdAndAssociatingIdAndTenantIdAndInheritedParentId(
+                                        internalEntityId,
+                                        permission.getId(),
+                                        userId,
+                                        tenantId,
+                                        internalEntityId);
+                        sharingRepository.deleteAllByInheritedParentIdAndPermissionTypeIdAndTenantIdAndSharingTypeAndAssociatingId(
+                                internalEntityId,
+                                permission.getId(),
+                                tenantId,
+                                Constants.INDIRECT_CASCADING,
+                                userId);
+                    }
+                });
+            }
+
 
             List<String> checkTypes = new ArrayList<>();
             checkTypes.add(Constants.INDIRECT_CASCADING);
+            checkTypes.add(Constants.DIRECT_CASCADING);
+            checkTypes.add(Constants.DIRECT_NON_CASCADING);
 
-            List<Sharing> newSharings = sharingRepository.findAllByEntityAndSharingTypeAndPermissionType(tenantId,
-                    internalEntityId, optionalPermissionType.get().getId(), checkTypes);
+            List<Sharing> newSharings = sharingRepository.findAllByEntityAndSharingType(tenantId,
+                    internalEntityId, checkTypes);
             org.apache.custos.sharing.persistance.model.Entity entity = entityOptional.get();
             if (newSharings != null && newSharings.size() > 0) {
                 entity.setSharedCount(newSharings.size());
+                entityRepository.save(entity);
             }
 
-            entityRepository.save(entity);
+
         }
 
         org.apache.custos.sharing.service.Status status = org.apache.custos.sharing.service.Status
@@ -1451,7 +1480,6 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
         responseObserver.onNext(status);
         responseObserver.onCompleted();
 
-
     }
 
     private void revokePermission(org.apache.custos.sharing.service.SharingRequest request,
@@ -1492,7 +1520,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
         Optional<org.apache.custos.sharing.persistance.model.PermissionType> optionalOwnerPermissionType =
                 permissionTypeRepository.findByExternalIdAndTenantId(Constants.OWNER, tenantId);
 
-        if (optionalOwnerPermissionType.get().equals(internalPermissionType)) {
+        if (optionalOwnerPermissionType.get().getId().equals(internalPermissionType)) {
             String msg = "Owner permission type can not be assigned";
             LOGGER.error(msg);
             responseObserver.onError(io.grpc.Status.PERMISSION_DENIED.withDescription(msg).asRuntimeException());
@@ -1502,7 +1530,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
         for (String userId : usersList) {
 
-            LOGGER.info("deleting " + userId + ":" + internalEntityId + ":" + internalPermissionType + ":" + tenantId);
+            LOGGER.debug("deleting " + userId + ":" + internalEntityId + ":" + internalPermissionType + ":" + tenantId);
             sharingRepository.
                     deleteAllByEntityIdAndPermissionTypeIdAndAssociatingIdAndTenantIdAndInheritedParentId(
                             internalEntityId,
@@ -1521,15 +1549,17 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
 
         List<String> checkTypes = new ArrayList<>();
         checkTypes.add(Constants.INDIRECT_CASCADING);
+        checkTypes.add(Constants.DIRECT_CASCADING);
+        checkTypes.add(Constants.DIRECT_NON_CASCADING);
 
-        List<Sharing> newSharings = sharingRepository.findAllByEntityAndSharingTypeAndPermissionType(tenantId,
-                internalEntityId, optionalPermissionType.get().getId(), checkTypes);
+        List<Sharing> newSharings = sharingRepository.findAllByEntityAndSharingType(tenantId,
+                internalEntityId, checkTypes);
         org.apache.custos.sharing.persistance.model.Entity entity = entityOptional.get();
         if (newSharings != null && newSharings.size() > 0) {
             entity.setSharedCount(newSharings.size());
+            entityRepository.save(entity);
         }
 
-        entityRepository.save(entity);
 
         org.apache.custos.sharing.service.Status status = org.apache.custos.sharing.service.Status
                 .newBuilder()