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 5fbb51088f359d3b3a7800faebc01a28cd5b9dce Author: Isuru Ranawaka <[email protected]> AuthorDate: Tue Feb 14 15:01:30 2023 -0500 implement sharing logic --- .gitignore | 4 ++ .../datacatalog/api/sharing/SharingManager.java | 17 +++--- .../api/sharing/SharingManagerImpl.java | 61 +++++++++++++++++----- .../stubs/src/main/proto/DataCatalogAPI.proto | 1 + 4 files changed, 61 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 79edcba..a78af18 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ target .vscode logs +.idea +.iml +.ipr +.iws diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java index cbe470e..65c61df 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManager.java @@ -5,6 +5,7 @@ import org.apache.airavata.datacatalog.api.GroupInfo; import org.apache.airavata.datacatalog.api.Permission; import org.apache.airavata.datacatalog.api.UserInfo; import org.apache.airavata.datacatalog.api.model.UserEntity; +import org.apache.custos.sharing.core.exceptions.CustosSharingException; public interface SharingManager { @@ -25,7 +26,7 @@ public interface SharingManager { * @param permission * @return */ - boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, Permission permission); + boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws Exception; /** * Return the name of the database view that includes sharing information @@ -44,7 +45,7 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, Permission permission); + void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws Exception; /** * Revoke permission from the user for the given data product. @@ -53,7 +54,7 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, Permission permission); + void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws Exception; /** * Grant permission to the group for the given data product. @@ -62,7 +63,7 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission); + void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) throws Exception; /** * Revoke permission from the group for the given data product. @@ -71,7 +72,7 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission); + void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) throws Exception; /** * Return true if public access at the given permission is granted for the @@ -82,7 +83,7 @@ public interface SharingManager { * @param permission * @return */ - boolean hasPublicAccess(DataProduct dataProduct, Permission permission); + boolean hasPublicAccess(DataProduct dataProduct, Permission permission) throws Exception; /** * Grant public access to the given data product. @@ -90,7 +91,7 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void grantPublicAccess(DataProduct dataProduct, Permission permission); + void grantPublicAccess(DataProduct dataProduct, Permission permission) throws Exception; /** * Revoke public access from the given data product. @@ -98,5 +99,5 @@ public interface SharingManager { * @param dataProduct * @param permission */ - void revokePublicAccess(DataProduct dataProduct, Permission permission); + void revokePublicAccess(DataProduct dataProduct, Permission permission) throws Exception; } diff --git a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java index 051bc35..7eab638 100644 --- a/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java +++ b/data-catalog-api/server/src/main/java/org/apache/airavata/datacatalog/api/sharing/SharingManagerImpl.java @@ -5,17 +5,23 @@ import org.apache.airavata.datacatalog.api.GroupInfo; import org.apache.airavata.datacatalog.api.Permission; import org.apache.airavata.datacatalog.api.UserInfo; import org.apache.airavata.datacatalog.api.model.UserEntity; - +import org.apache.custos.sharing.core.exceptions.CustosSharingException; import org.apache.custos.sharing.core.impl.SharingImpl; +import org.apache.custos.sharing.core.utils.Constants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; + @Component -public class SharingManagerImpl implements SharingManager { +public class SharingManagerImpl implements SharingManager { @Autowired SharingImpl custosSharingImpl; + private static final String PUBLIC_ACCESS_GROUP = "public_access_group"; + @Override public UserEntity resolveUser(UserInfo userInfo) { @@ -23,8 +29,9 @@ public class SharingManagerImpl implements SharingManager { } @Override - public boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, Permission permission) { - return false; + public boolean userHasAccess(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws CustosSharingException { + return custosSharingImpl.userHasAccess(userInfo.getTenantId(), dataProduct.getDataProductId(), permission.name(), + userInfo.getUserId()); } @Override @@ -33,37 +40,63 @@ public class SharingManagerImpl implements SharingManager { } @Override - public void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) { + public void grantPermissionToUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws CustosSharingException { + List<String> userIds = new ArrayList<>(); + userIds.add(userInfo.getUserId()); + custosSharingImpl.shareEntity(userInfo.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds, true, Constants.USER, null); } @Override - public void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) { + public void revokePermissionFromUser(UserInfo userInfo, DataProduct dataProduct, Permission permission) throws CustosSharingException { + + List<String> userIds = new ArrayList<>(); + userIds.add(userInfo.getUserId()); + custosSharingImpl.revokePermission(userInfo.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds); } @Override - public void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) { + public void grantPermissionToGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) throws CustosSharingException { + List<String> userIds = new ArrayList<>(); + userIds.add(groupInfo.getGroupId()); + custosSharingImpl.shareEntity(groupInfo.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds, true, Constants.GROUP, null); } @Override - public void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) { - + public void revokePermissionFromGroup(GroupInfo groupInfo, DataProduct dataProduct, Permission permission) throws CustosSharingException { + List<String> userIds = new ArrayList<>(); + userIds.add(groupInfo.getGroupId()); + custosSharingImpl.revokePermission(groupInfo.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds); } @Override - public boolean hasPublicAccess(DataProduct dataProduct, Permission permission) { - return false; + public boolean hasPublicAccess(DataProduct dataProduct, Permission permission) throws CustosSharingException{ + return custosSharingImpl.userHasAccess(dataProduct.getTenantId(), dataProduct.getDataProductId(), permission.name(), + PUBLIC_ACCESS_GROUP); } @Override - public void grantPublicAccess(DataProduct dataProduct, Permission permission) { + public void grantPublicAccess(DataProduct dataProduct, Permission permission) throws CustosSharingException{ + + //TODO: create PUBLIC GROUP If not exists + List<String> userIds = new ArrayList<>(); + userIds.add(PUBLIC_ACCESS_GROUP); + custosSharingImpl.shareEntity(dataProduct.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds, true, Constants.GROUP, null); } @Override - public void revokePublicAccess(DataProduct dataProduct, Permission permission) { - + public void revokePublicAccess(DataProduct dataProduct, Permission permission) throws CustosSharingException{ + List<String> userIds = new ArrayList<>(); + userIds.add(PUBLIC_ACCESS_GROUP); + custosSharingImpl.revokePermission(dataProduct.getTenantId(), + dataProduct.getDataProductId(), permission.name(), userIds); } } diff --git a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto index 779002c..476fb1a 100644 --- a/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto +++ b/data-catalog-api/stubs/src/main/proto/DataCatalogAPI.proto @@ -62,6 +62,7 @@ message DataProduct { optional string parent_data_product_id = 2; string name = 3; optional string metadata = 4; + string tenant_id = 5; } message DataProductCreateRequest {
