From d758a542aa258d48c23e59e66e329e249cbc5485 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Fri, 18 Nov 2022 11:32:26 -0800 Subject: [PATCH] Fix upgrade issues with new bot role feature (#8895) --- .../service/jdbi3/UserRepository.java | 3 +++ .../service/resources/bots/BotResource.java | 17 +++++++++++++++++ .../service/resources/teams/RoleResource.java | 1 + 3 files changed, 21 insertions(+) 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 990a277b0b5..2297b06fb4c 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 @@ -89,6 +89,9 @@ public class UserRepository extends EntityRepository { } private List getInheritedRoles(User user) throws IOException { + if (Boolean.TRUE.equals(user.getIsBot())) { + return null; // No inherited roles for bots + } getTeams(user); return SubjectCache.getInstance() != null ? SubjectCache.getInstance().getRolesForTeams(getTeams(user)) : null; } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java index a0fee8c93cd..45d1a193ad9 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/bots/BotResource.java @@ -53,6 +53,7 @@ import org.openmetadata.schema.api.data.RestoreEntity; import org.openmetadata.schema.entity.Bot; import org.openmetadata.schema.entity.teams.User; import org.openmetadata.schema.type.EntityHistory; +import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Relationship; import org.openmetadata.service.Entity; @@ -68,6 +69,7 @@ import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.security.DefaultAuthorizer; import org.openmetadata.service.security.SecurityUtil; import org.openmetadata.service.util.EntityUtil; +import org.openmetadata.service.util.EntityUtil.Fields; import org.openmetadata.service.util.ResultList; @Slf4j @@ -104,6 +106,21 @@ public class BotResource extends EntityResource { } } + @Override + protected void upgrade() throws IOException { + // This should be deleted once 0.13 is deprecated + // For all the existing bots, add ingestion bot role + ResultList bots = dao.listAfter(null, Fields.EMPTY_FIELDS, new ListFilter(Include.NON_DELETED), 1000, null); + EntityReference ingestionBotRole = RoleResource.getRole(Entity.INGESTION_BOT_ROLE); + for (Bot bot : bots.getData()) { + User botUser = Entity.getEntity(bot.getBotUser(), "roles", Include.NON_DELETED); + if (botUser.getRoles() == null) { + botUser.setRoles(List.of(ingestionBotRole)); + dao.addRelationship(botUser.getId(), ingestionBotRole.getId(), Entity.USER, Entity.ROLE, Relationship.HAS); + } + } + } + private static String getRoleForBot(String botName) { switch (botName) { case Entity.INGESTION_BOT_NAME: diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java index cad9ee40335..49f4731de46 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/teams/RoleResource.java @@ -94,6 +94,7 @@ public class RoleResource extends EntityResource { public void initialize(OpenMetadataApplicationConfig config) throws IOException { List roles = dao.getEntitiesFromSeedData(); for (Role role : roles) { + role.setFullyQualifiedName(role.getName()); List policies = role.getPolicies(); for (EntityReference policy : policies) { EntityReference ref = Entity.getEntityReferenceByName(Entity.POLICY, policy.getName(), Include.NON_DELETED);