Repository: incubator-ranger Updated Branches: refs/heads/master 2c6554ca9 -> 1fc84ff6b
RANGER-960: service-def update should preserve the permission order Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/1fc84ff6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/1fc84ff6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/1fc84ff6 Branch: refs/heads/master Commit: 1fc84ff6bd864e908ee173aff37d5b0388de2110 Parents: 2c6554c Author: Madhan Neethiraj <[email protected]> Authored: Thu Apr 28 22:49:45 2016 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Fri Apr 29 15:28:25 2016 -0700 ---------------------------------------------------------------------- .../org/apache/ranger/biz/ServiceDBStore.java | 32 +++++++++++++++----- .../resources/META-INF/jpa_named_queries.xml | 6 ++-- .../apache/ranger/biz/TestServiceDBStore.java | 7 +++++ 3 files changed, 35 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java index 1380456..ab0798b 100644 --- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java @@ -537,13 +537,15 @@ public class ServiceDBStore extends AbstractServiceStore { List<XXEnumDef> xxEnums = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId); XXServiceConfigDefDao xxServiceConfigDao = daoMgr.getXXServiceConfigDef(); - for (RangerServiceConfigDef config : configs) { + for (int i = 0; i < configs.size(); i++) { + RangerServiceConfigDef config = configs.get(i); boolean found = false; for (XXServiceConfigDef xConfig : xxConfigs) { if (config.getItemId() != null && config.getItemId().equals(xConfig.getItemId())) { found = true; xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xConfig.setOrder(i); xConfig = xxServiceConfigDao.update(xConfig); config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig); break; @@ -553,6 +555,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXServiceConfigDef xConfig = new XXServiceConfigDef(); xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xConfig.setOrder(i); xConfig = xxServiceConfigDao.create(xConfig); config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig); } @@ -614,13 +617,15 @@ public class ServiceDBStore extends AbstractServiceStore { } XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef(); - for (RangerAccessTypeDef access : accessTypes) { + for(int i = 0; i < accessTypes.size(); i++) { + RangerAccessTypeDef access = accessTypes.get(i); boolean found = false; for (XXAccessTypeDef xAccess : xxAccessTypes) { if (access.getItemId() != null && access.getItemId().equals(xAccess.getItemId())) { found = true; xAccess = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccess, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xAccess.setOrder(i); xAccess = xxATDDao.update(xAccess); Collection<String> impliedGrants = access.getImpliedGrants(); @@ -664,6 +669,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXAccessTypeDef xAccessType = new XXAccessTypeDef(); xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccessType, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xAccessType.setOrder(i); xAccessType = xxATDDao.create(xAccessType); Collection<String> impliedGrants = access.getImpliedGrants(); @@ -698,13 +704,15 @@ public class ServiceDBStore extends AbstractServiceStore { } XXPolicyConditionDefDao xxPolCondDao = daoMgr.getXXPolicyConditionDef(); - for (RangerPolicyConditionDef condition : policyConditions) { + for (int i = 0; i < policyConditions.size(); i++) { + RangerPolicyConditionDef condition = policyConditions.get(i); boolean found = false; for (XXPolicyConditionDef xCondition : xxPolicyConditions) { if (condition.getItemId() != null && condition.getItemId().equals(xCondition.getItemId())) { found = true; xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xCondition.setOrder(i); xCondition = xxPolCondDao.update(xCondition); condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition); break; @@ -714,6 +722,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXPolicyConditionDef xCondition = new XXPolicyConditionDef(); xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xCondition.setOrder(i); xCondition = xxPolCondDao.create(xCondition); condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition); } @@ -742,13 +751,15 @@ public class ServiceDBStore extends AbstractServiceStore { } XXContextEnricherDefDao xxContextEnricherDao = daoMgr.getXXContextEnricherDef(); - for (RangerContextEnricherDef context : contextEnrichers) { + for (int i = 0; i < contextEnrichers.size(); i++) { + RangerContextEnricherDef context = contextEnrichers.get(i); boolean found = false; for (XXContextEnricherDef xContext : xxContextEnrichers) { if (context.getItemId() != null && context.getItemId().equals(xContext.getItemId())) { found = true; xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xContext.setOrder(i); xContext = xxContextEnricherDao.update(xContext); context = serviceDefService.populateXXToRangerContextEnricherDef(xContext); break; @@ -758,6 +769,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXContextEnricherDef xContext = new XXContextEnricherDef(); xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xContext.setOrder(i); xContext = xxContextEnricherDao.create(xContext); context = serviceDefService.populateXXToRangerContextEnricherDef(xContext); } @@ -789,13 +801,15 @@ public class ServiceDBStore extends AbstractServiceStore { List<XXEnumElementDef> xxEnumEleDefs = xEnumEleDao.findByEnumDefId(xEnumDef.getId()); List<RangerEnumElementDef> enumEleDefs = enumDef.getElements(); - for (RangerEnumElementDef eleDef : enumEleDefs) { + for (int i = 0; i < enumEleDefs.size(); i++) { + RangerEnumElementDef eleDef = enumEleDefs.get(i); boolean foundEle = false; for (XXEnumElementDef xEleDef : xxEnumEleDefs) { if (eleDef.getItemId() != null && eleDef.getItemId().equals(xEleDef.getItemId())) { foundEle = true; xEleDef = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xEleDef, xEnumDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xEleDef.setOrder(i); xEleDef = xEnumEleDao.update(xEleDef); break; } @@ -804,6 +818,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXEnumElementDef xElement = new XXEnumElementDef(); xElement = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xElement, xEnumDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xElement.setOrder(i); xElement = xEnumEleDao.create(xElement); } } @@ -868,7 +883,8 @@ public class ServiceDBStore extends AbstractServiceStore { List<XXResourceDef> xxResourceDefs = xxResDefDao.findByServiceDefId(serviceDefId); // create or update dataMasks - for (RangerDataMaskTypeDef dataMask : dataMasks) { + for(int i = 0; i < dataMasks.size(); i++) { + RangerDataMaskTypeDef dataMask = dataMasks.get(i); boolean found = false; for (XXDataMaskTypeDef xxDataMask : xxDataMaskTypes) { if (xxDataMask.getItemId() != null && xxDataMask.getItemId().equals(dataMask.getItemId())) { @@ -879,6 +895,7 @@ public class ServiceDBStore extends AbstractServiceStore { found = true; xxDataMask = serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT); + xxDataMask.setOrder(i); xxDataMask = dataMaskTypeDao.update(xxDataMask); dataMask = serviceDefService.populateXXToRangerDataMaskTypeDef(xxDataMask); break; @@ -892,6 +909,7 @@ public class ServiceDBStore extends AbstractServiceStore { XXDataMaskTypeDef xxDataMask = new XXDataMaskTypeDef(); xxDataMask = serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT); + xxDataMask.setOrder(i); xxDataMask = dataMaskTypeDao.create(xxDataMask); } } @@ -917,7 +935,7 @@ public class ServiceDBStore extends AbstractServiceStore { for(RangerAccessTypeDef accessType : dataMaskAccessTypes) { if(! isAccessTypeInList(accessType.getName(), xxAccessTypeDefs)) { throw restErrorUtil.createRESTException("accessType with name: " - + accessType.getName() + " does not exists", MessageEnums.DATA_NOT_FOUND); + + accessType.getName() + " does not exist", MessageEnums.DATA_NOT_FOUND); } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/security-admin/src/main/resources/META-INF/jpa_named_queries.xml ---------------------------------------------------------------------- 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 39c8ec3..f209bc4 100644 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@ -321,7 +321,7 @@ <!-- XXAccessTypeDef --> <named-query name="XXAccessTypeDef.findByServiceDefId"> - <query>select obj from XXAccessTypeDef obj where obj.defId = :serviceDefId</query> + <query>select obj from XXAccessTypeDef obj where obj.defId = :serviceDefId order by obj.order</query> </named-query> <named-query name="XXAccessTypeDef.findByNameAndServiceId"> @@ -331,7 +331,7 @@ <!-- XXPolicyConditionDef --> <named-query name="XXPolicyConditionDef.findByServiceDefId"> - <query>select obj from XXPolicyConditionDef obj where obj.defId = :serviceDefId</query> + <query>select obj from XXPolicyConditionDef obj where obj.defId = :serviceDefId order by obj.order</query> </named-query> <named-query name="XXPolicyConditionDef.findByServiceDefIdAndName"> @@ -367,7 +367,7 @@ <!-- XXDataMaskTypeDef --> <named-query name="XXDataMaskTypeDef.findByServiceDefId"> - <query>select obj from XXDataMaskTypeDef obj where obj.defId = :serviceDefId</query> + <query>select obj from XXDataMaskTypeDef obj where obj.defId = :serviceDefId order by obj.order</query> </named-query> <named-query name="XXDataMaskTypeDef.findByNameAndServiceId"> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java index 7af5c45..aaafde0 100644 --- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java +++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java @@ -465,6 +465,13 @@ public class TestServiceDBStore { serviceConfigDefObj.setType("1"); svcConfDefList.add(serviceConfigDefObj); + Mockito.when( + serviceDefService.populateRangerServiceConfigDefToXX( + Mockito.any(RangerServiceConfigDef.class), Mockito.any(XXServiceConfigDef.class), Mockito.any(XXServiceDef.class), + Mockito.eq(RangerServiceDefService.OPERATION_CREATE_CONTEXT))).thenReturn(serviceConfigDefObj); + Mockito.when(xServiceConfigDefDao.create(serviceConfigDefObj)) + .thenReturn(serviceConfigDefObj); + List<XXResourceDef> resDefList = new ArrayList<XXResourceDef>(); XXResourceDef resourceDef = new XXResourceDef(); resourceDef.setAddedByUserId(Id);
