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

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


The following commit(s) were added to refs/heads/production by this push:
     new fd37062cf sharing service fix permission revoke issue
     new 468d89d53 Merge pull request #334 from isururanawaka/production_new
fd37062cf is described below

commit fd37062cfac27bca2443c73d560549739ac0d81d
Author: Isuru Ranawaka <[email protected]>
AuthorDate: Mon Dec 19 21:26:49 2022 -0500

    sharing service fix permission revoke issue
---
 .../custos/sharing/service/SharingService.java     | 50 +++++++++++++++++++---
 1 file changed, 44 insertions(+), 6 deletions(-)

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 d67e85f9c..449dafef1 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
@@ -1616,6 +1616,11 @@ public class SharingService extends 
org.apache.custos.sharing.service.SharingSer
             return;
         }
 
+        List<String> checkTypes = new ArrayList<>();
+        checkTypes.add(Constants.INDIRECT_CASCADING);
+        checkTypes.add(Constants.DIRECT_CASCADING);
+        checkTypes.add(Constants.DIRECT_NON_CASCADING);
+
 
         for (String userId : usersList) {
 
@@ -1633,13 +1638,24 @@ public class SharingService extends 
org.apache.custos.sharing.service.SharingSer
                     tenantId,
                     Constants.INDIRECT_CASCADING,
                     userId);
-        }
 
+            List<Sharing> exSharings = 
sharingRepository.findSharingForEntityOfTenant(tenantId, internalEntityId, 
checkTypes);
+            if (!exSharings.isEmpty()) {
+                sharingRepository.
+                        
deleteAllByEntityIdAndPermissionTypeIdAndAssociatingIdAndTenantIdAndInheritedParentId(
+                                internalEntityId,
+                                internalPermissionType,
+                                userId,
+                                tenantId,
+                                
exSharings.get(0).getInheritedParent().getId());
+                revokeCascadingPermissionForChildEntities(internalEntityId,
+                        internalPermissionType,
+                        userId,
+                        tenantId,
+                        exSharings.get(0).getInheritedParent().getId());
+            }
 
-        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.findAllByEntityAndSharingType(tenantId,
                 internalEntityId, checkTypes);
@@ -1649,7 +1665,6 @@ public class SharingService extends 
org.apache.custos.sharing.service.SharingSer
             entityRepository.save(entity);
         }
 
-
         org.apache.custos.sharing.service.Status status = 
org.apache.custos.sharing.service.Status
                 .newBuilder()
                 .setStatus(true)
@@ -1659,4 +1674,27 @@ public class SharingService extends 
org.apache.custos.sharing.service.SharingSer
     }
 
 
+    private boolean revokeCascadingPermissionForChildEntities
+            (String entityId, String internalPermissionType, String userId, 
long tenantId, String inheritedParentId) {
+        List<String> newSharingTypes = new ArrayList<>();
+        newSharingTypes.add(Constants.INDIRECT_CASCADING);
+
+        List<org.apache.custos.sharing.persistance.model.Entity> entityList = 
entityRepository
+                .findAllByExternalParentIdAndTenantId(entityId, tenantId);
+
+        entityList.forEach(entity -> {
+            sharingRepository.
+                    
deleteAllByEntityIdAndPermissionTypeIdAndAssociatingIdAndTenantIdAndInheritedParentId(
+                            entity.getId(),
+                            internalPermissionType,
+                            userId,
+                            tenantId,
+                            inheritedParentId);
+
+            revokeCascadingPermissionForChildEntities(entity.getId(),
+                    internalPermissionType, userId, tenantId, 
inheritedParentId);
+        });
+
+        return true;
+    }
 }

Reply via email to