diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v160/Migration.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v160/Migration.java index bf3d4769338..b6db78002b9 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v160/Migration.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/mysql/v160/Migration.java @@ -1,6 +1,7 @@ package org.openmetadata.service.migration.mysql.v160; import static org.openmetadata.service.migration.utils.v160.MigrationUtil.addAppExtensionName; +import static org.openmetadata.service.migration.utils.v160.MigrationUtil.addViewAllRuleToOrgPolicy; import static org.openmetadata.service.migration.utils.v160.MigrationUtil.migrateServiceTypesAndConnections; import lombok.SneakyThrows; @@ -18,5 +19,6 @@ public class Migration extends MigrationProcessImpl { public void runDataMigration() { addAppExtensionName(handle, collectionDAO, authenticationConfiguration, false); migrateServiceTypesAndConnections(handle, false); + addViewAllRuleToOrgPolicy(collectionDAO); } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v160/Migration.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v160/Migration.java index ca1f9547f54..277c27578a5 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v160/Migration.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/postgres/v160/Migration.java @@ -1,6 +1,7 @@ package org.openmetadata.service.migration.postgres.v160; import static org.openmetadata.service.migration.utils.v160.MigrationUtil.addAppExtensionName; +import static org.openmetadata.service.migration.utils.v160.MigrationUtil.addViewAllRuleToOrgPolicy; import static org.openmetadata.service.migration.utils.v160.MigrationUtil.migrateServiceTypesAndConnections; import lombok.SneakyThrows; @@ -18,5 +19,6 @@ public class Migration extends MigrationProcessImpl { public void runDataMigration() { addAppExtensionName(handle, collectionDAO, authenticationConfiguration, true); migrateServiceTypesAndConnections(handle, true); + addViewAllRuleToOrgPolicy(collectionDAO); } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v160/MigrationUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v160/MigrationUtil.java index 8c1608f5195..86030535a17 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v160/MigrationUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/migration/utils/v160/MigrationUtil.java @@ -1,5 +1,7 @@ package org.openmetadata.service.migration.utils.v160; +import static org.openmetadata.common.utils.CommonUtil.listOf; + import java.util.UUID; import javax.json.JsonObject; import lombok.extern.slf4j.Slf4j; @@ -8,11 +10,15 @@ import org.jdbi.v3.core.statement.Update; import org.openmetadata.schema.api.security.AuthenticationConfiguration; import org.openmetadata.schema.entity.app.App; import org.openmetadata.schema.entity.app.AppExtension; +import org.openmetadata.schema.entity.policies.Policy; +import org.openmetadata.schema.entity.policies.accessControl.Rule; import org.openmetadata.schema.type.Include; +import org.openmetadata.schema.type.MetadataOperation; import org.openmetadata.service.Entity; import org.openmetadata.service.exception.EntityNotFoundException; import org.openmetadata.service.jdbi3.AppRepository; import org.openmetadata.service.jdbi3.CollectionDAO; +import org.openmetadata.service.jdbi3.PolicyRepository; import org.openmetadata.service.util.JsonUtils; @Slf4j @@ -71,6 +77,38 @@ public class MigrationUtil { } } + public static void addViewAllRuleToOrgPolicy(CollectionDAO collectionDAO) { + PolicyRepository repository = (PolicyRepository) Entity.getEntityRepository(Entity.POLICY); + try { + Policy organizationPolicy = repository.findByName("OrganizationPolicy", Include.NON_DELETED); + boolean noViewAllRule = true; + for (Rule rule : organizationPolicy.getRules()) { + if (rule.getName().equals("OrganizationPolicy-View-All-Rule")) { + noViewAllRule = false; + break; + } + } + if (noViewAllRule) { + Rule viewAllRule = + new Rule() + .withName("OrganizationPolicy-ViewAll-Rule") + .withResources(listOf("all")) + .withOperations(listOf(MetadataOperation.VIEW_ALL)) + .withEffect(Rule.Effect.ALLOW) + .withDescription("Allow all users to view all metadata"); + organizationPolicy.getRules().add(viewAllRule); + collectionDAO + .policyDAO() + .update( + organizationPolicy.getId(), + organizationPolicy.getFullyQualifiedName(), + JsonUtils.pojoToJson(organizationPolicy)); + } + } catch (EntityNotFoundException ex) { + LOG.warn("OrganizationPolicy not found", ex); + } + } + private static void updateAppExtension(Handle handle, App app, boolean postgres) { Update update; if (postgres) {