diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/Entity.java b/openmetadata-service/src/main/java/org/openmetadata/service/Entity.java index cf4053273f4..1448ff62c41 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/Entity.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/Entity.java @@ -193,7 +193,7 @@ public final class Entity { Collections.sort(ENTITY_LIST); // Set up entity operations for permissions - ResourceRegistry.addResource(entity, entitySpecificOperations); + ResourceRegistry.addResource(entity, entitySpecificOperations, getEntityFields(clazz)); LOG.info("Registering entity {} {}", clazz, entity); } @@ -345,7 +345,7 @@ public final class Entity { } public static Class getEntityClassFromType(String entityType) { - return EntityInterface.ENTITY_TYPE_TO_CLASS_MAP.get(entityType); + return EntityInterface.ENTITY_TYPE_TO_CLASS_MAP.get(entityType.toLowerCase(Locale.ROOT)); } /** diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/ResourceRegistry.java b/openmetadata-service/src/main/java/org/openmetadata/service/ResourceRegistry.java index fd5e7447a8e..9b14e3aae53 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/ResourceRegistry.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/ResourceRegistry.java @@ -2,7 +2,6 @@ package org.openmetadata.service; import static org.openmetadata.common.utils.CommonUtil.listOf; import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty; -import static org.openmetadata.service.Entity.FIELD_OWNER; import java.util.ArrayList; import java.util.Arrays; @@ -37,7 +36,7 @@ public class ResourceRegistry { mapFieldOperation(MetadataOperation.EDIT_DESCRIPTION, Entity.FIELD_DESCRIPTION); mapFieldOperation(MetadataOperation.EDIT_DISPLAY_NAME, Entity.FIELD_DISPLAY_NAME); mapFieldOperation(MetadataOperation.EDIT_TAGS, Entity.FIELD_TAGS); - mapFieldOperation(MetadataOperation.EDIT_OWNER, FIELD_OWNER); + mapFieldOperation(MetadataOperation.EDIT_OWNER, Entity.FIELD_OWNER); mapFieldOperation(MetadataOperation.EDIT_CUSTOM_FIELDS, "extension"); mapFieldOperation(MetadataOperation.EDIT_USERS, "users"); mapFieldOperation(MetadataOperation.EDIT_ROLE, "defaultRoles"); @@ -54,19 +53,43 @@ public class ResourceRegistry { private ResourceRegistry() {} - public static void addResource(String resourceName, List entitySpecificOperations) { + public static void addResource( + String resourceName, List entitySpecificOperations, List entityFields) { // If resourceName already exists, then no need to add the resource again if (RESOURCE_DESCRIPTORS.stream().anyMatch(d -> d.getName().equals(resourceName))) { return; } + ResourceDescriptor resourceDescriptor = + new ResourceDescriptor() + .withName(resourceName) + .withOperations(getOperations(resourceName, entitySpecificOperations, entityFields)); + RESOURCE_DESCRIPTORS.sort(Comparator.comparing(ResourceDescriptor::getName)); + RESOURCE_DESCRIPTORS.add(resourceDescriptor); + } + + private static List getOperations( + String resourceName, List entitySpecificOperations, List entityFields) { Set operations = new TreeSet<>(COMMON_OPERATIONS); if (!nullOrEmpty(entitySpecificOperations)) { operations.addAll(entitySpecificOperations); } - ResourceDescriptor resourceDescriptor = - new ResourceDescriptor().withName(resourceName).withOperations(new ArrayList<>(operations)); - RESOURCE_DESCRIPTORS.sort(Comparator.comparing(ResourceDescriptor::getName)); - RESOURCE_DESCRIPTORS.add(resourceDescriptor); + // Set up operations based on common fields present in an entity + if (entityFields.contains(Entity.FIELD_TAGS)) { + operations.add(MetadataOperation.EDIT_TAGS); + } + if (entityFields.contains(Entity.FIELD_OWNER)) { + operations.add(MetadataOperation.EDIT_OWNER); + } + if (entityFields.contains(Entity.FIELD_EXTENSION)) { + operations.add(MetadataOperation.EDIT_CUSTOM_FIELDS); + } + if (entityFields.contains("roles") || entityFields.contains("defaultRoles")) { + operations.add(MetadataOperation.EDIT_ROLE); + } + if (entityFields.contains("reviewers")) { + operations.add(MetadataOperation.EDIT_REVIEWERS); + } + return new ArrayList<>(operations); } public static List listResourceDescriptors() { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java index 60dc4c2fbf9..939a0a89f2f 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java @@ -56,7 +56,7 @@ public class DashboardDataModelRepository extends EntityRepository { MetadataOperation.VIEW_QUERIES, MetadataOperation.VIEW_DATA_PROFILE, MetadataOperation.VIEW_SAMPLE_DATA, + MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_TESTS, MetadataOperation.EDIT_QUERIES, MetadataOperation.EDIT_DATA_PROFILE, diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java index afa067cef5b..b348eb88b0c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java @@ -92,7 +92,7 @@ public class TeamRepository extends EntityRepository { dao, TEAM_PATCH_FIELDS, TEAM_UPDATE_FIELDS, - listOf(MetadataOperation.EDIT_ROLE, MetadataOperation.EDIT_USERS)); + listOf(MetadataOperation.EDIT_POLICY, MetadataOperation.EDIT_USERS)); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java index 6562694205f..dd6c249db6d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java @@ -77,7 +77,7 @@ public class UserRepository extends EntityRepository { dao, USER_PATCH_FIELDS, USER_UPDATE_FIELDS, - listOf(MetadataOperation.EDIT_ROLE, MetadataOperation.EDIT_TEAMS)); + listOf(MetadataOperation.EDIT_TEAMS)); organization = dao.teamDAO().findEntityReferenceByName(Entity.ORGANIZATION_NAME, Include.ALL); } diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/databases/TableResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/databases/TableResourceTest.java index 3e6c1d168a5..f7d77911748 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/databases/TableResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/databases/TableResourceTest.java @@ -1724,11 +1724,6 @@ public class TableResourceTest extends EntityResourceTest { assertReference(USER2_REF, schema.getOwner()); // Owner remains the same } - public void checkLocationDeleted(UUID tableId, Map authHeaders) throws HttpResponseException { - Table getTable = getEntity(tableId, "location", authHeaders); - assertNull(getTable.getLocation()); - } - void assertFields(List tableList, String fieldsParam) { tableList.forEach(t -> assertFields(t, fieldsParam)); }