From 8d411e2506dd3656c4ec19db3a12c1e8eee30c09 Mon Sep 17 00:00:00 2001 From: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:29:07 +0530 Subject: [PATCH] Prevent Rules with same name in a Policy (#13883) --- .../openmetadata/service/jdbi3/PolicyRepository.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PolicyRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PolicyRepository.java index c3c8aa8fed5..373564fa4dc 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PolicyRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PolicyRepository.java @@ -28,7 +28,9 @@ import static org.openmetadata.service.util.EntityUtil.ruleMatch; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +import javax.ws.rs.BadRequestException; import lombok.extern.slf4j.Slf4j; import org.jdbi.v3.sqlobject.transaction.Transaction; import org.openmetadata.schema.entity.policies.Policy; @@ -158,6 +160,15 @@ public class PolicyRepository extends EntityRepository { } private void updateRules(List origRules, List updatedRules) { + // Check if the Rules have unique names + if (!nullOrEmpty(updatedRules)) { + Set ruleNames = updatedRules.stream().map(Rule::getName).collect(Collectors.toSet()); + + if (ruleNames.size() != updatedRules.size()) { + throw new BadRequestException("Policy contains duplicate Rules. Please use unique name for Rules."); + } + } + // Record change description List deletedRules = new ArrayList<>(); List addedRules = new ArrayList<>();