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()