RANGER-2913: Import policy fails when policy with same name present in multiple service
Signed-off-by: pradeep <pradeep@apache.org>
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
index abd8aa6..a1db600 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
@@ -251,4 +251,26 @@
}
return ret;
}
+
+ public XXPolicy findPolicy(String policyName, String serviceName, String zoneName) {
+ if (policyName == null || serviceName == null) {
+ return null;
+ }
+
+ try {
+ if (zoneName == null) {
+ return getEntityManager().createNamedQuery("XXPolicy.findPolicyByPolicyNameAndServiceName", tClass)
+ .setParameter("policyName", policyName).setParameter("serviceName", serviceName)
+ .getSingleResult();
+ } else {
+ return getEntityManager()
+ .createNamedQuery("XXPolicy.findPolicyByPolicyNameAndServiceNameAndZoneName", tClass)
+ .setParameter("policyName", policyName).setParameter("serviceName", serviceName)
+ .setParameter("zoneName", zoneName).getSingleResult();
+ }
+ } catch (NoResultException e) {
+ return null;
+ }
+
+ }
}
\ No newline at end of file
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index c795525..18abc29 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -1751,7 +1751,7 @@
if (existingPolicy == null) {
if (StringUtils.isNotEmpty(policy.getName())) {
- XXPolicy dbPolicy = daoManager.getXXPolicy().findByPolicyName(policy.getName());
+ XXPolicy dbPolicy = daoManager.getXXPolicy().findPolicy(policy.getName(), policy.getService(), policy.getZoneName());
if (dbPolicy != null) {
policy.setName(policy.getName() + System.currentTimeMillis());
}
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index 22e71e5..5813209 100755
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -323,6 +323,14 @@
<query>select DISTINCT(obj.service) from XXPolicy obj, XXPolicyRefRole policyRefRole where policyRefRole.roleId = :roleId and policyRefRole.policyId = obj.id</query>
</named-query>
+ <named-query name="XXPolicy.findPolicyByPolicyNameAndServiceName">
+ <query>select obj from XXPolicy obj, XXService svc where obj.name = :policyName and obj.service = svc.id and svc.name = :serviceName</query>
+ </named-query>
+
+ <named-query name="XXPolicy.findPolicyByPolicyNameAndServiceNameAndZoneName">
+ <query>select obj from XXPolicy obj, XXService svc, XXSecurityZone zone where obj.name = :policyName and obj.service = svc.id and svc.name = :serviceName and obj.zoneId = zone.id and zone.name = :zoneName</query>
+ </named-query>
+
<named-query name="XXPolicy.findRoleRefPolicyCount">
<query>select count(roleRef.policyId)
from XXPolicy policy, XXPolicyRefRole roleRef