Skip to content

Commit 1fc84ff

Browse files
committed
RANGER-960: service-def update should preserve the permission order
1 parent 2c6554c commit 1fc84ff

3 files changed

Lines changed: 35 additions & 10 deletions

File tree

security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -537,13 +537,15 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
537537
List<XXEnumDef> xxEnums = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
538538

539539
XXServiceConfigDefDao xxServiceConfigDao = daoMgr.getXXServiceConfigDef();
540-
for (RangerServiceConfigDef config : configs) {
540+
for (int i = 0; i < configs.size(); i++) {
541+
RangerServiceConfigDef config = configs.get(i);
541542
boolean found = false;
542543
for (XXServiceConfigDef xConfig : xxConfigs) {
543544
if (config.getItemId() != null && config.getItemId().equals(xConfig.getItemId())) {
544545
found = true;
545546
xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef,
546547
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
548+
xConfig.setOrder(i);
547549
xConfig = xxServiceConfigDao.update(xConfig);
548550
config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
549551
break;
@@ -553,6 +555,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
553555
XXServiceConfigDef xConfig = new XXServiceConfigDef();
554556
xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef,
555557
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
558+
xConfig.setOrder(i);
556559
xConfig = xxServiceConfigDao.create(xConfig);
557560
config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
558561
}
@@ -614,13 +617,15 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
614617
}
615618

616619
XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef();
617-
for (RangerAccessTypeDef access : accessTypes) {
620+
for(int i = 0; i < accessTypes.size(); i++) {
621+
RangerAccessTypeDef access = accessTypes.get(i);
618622
boolean found = false;
619623
for (XXAccessTypeDef xAccess : xxAccessTypes) {
620624
if (access.getItemId() != null && access.getItemId().equals(xAccess.getItemId())) {
621625
found = true;
622626
xAccess = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccess, createdSvcDef,
623627
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
628+
xAccess.setOrder(i);
624629
xAccess = xxATDDao.update(xAccess);
625630

626631
Collection<String> impliedGrants = access.getImpliedGrants();
@@ -664,6 +669,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
664669
XXAccessTypeDef xAccessType = new XXAccessTypeDef();
665670
xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccessType, createdSvcDef,
666671
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
672+
xAccessType.setOrder(i);
667673
xAccessType = xxATDDao.create(xAccessType);
668674

669675
Collection<String> impliedGrants = access.getImpliedGrants();
@@ -698,13 +704,15 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
698704
}
699705

700706
XXPolicyConditionDefDao xxPolCondDao = daoMgr.getXXPolicyConditionDef();
701-
for (RangerPolicyConditionDef condition : policyConditions) {
707+
for (int i = 0; i < policyConditions.size(); i++) {
708+
RangerPolicyConditionDef condition = policyConditions.get(i);
702709
boolean found = false;
703710
for (XXPolicyConditionDef xCondition : xxPolicyConditions) {
704711
if (condition.getItemId() != null && condition.getItemId().equals(xCondition.getItemId())) {
705712
found = true;
706713
xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
707714
createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
715+
xCondition.setOrder(i);
708716
xCondition = xxPolCondDao.update(xCondition);
709717
condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
710718
break;
@@ -714,6 +722,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
714722
XXPolicyConditionDef xCondition = new XXPolicyConditionDef();
715723
xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
716724
createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT);
725+
xCondition.setOrder(i);
717726
xCondition = xxPolCondDao.create(xCondition);
718727
condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
719728
}
@@ -742,13 +751,15 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
742751
}
743752

744753
XXContextEnricherDefDao xxContextEnricherDao = daoMgr.getXXContextEnricherDef();
745-
for (RangerContextEnricherDef context : contextEnrichers) {
754+
for (int i = 0; i < contextEnrichers.size(); i++) {
755+
RangerContextEnricherDef context = contextEnrichers.get(i);
746756
boolean found = false;
747757
for (XXContextEnricherDef xContext : xxContextEnrichers) {
748758
if (context.getItemId() != null && context.getItemId().equals(xContext.getItemId())) {
749759
found = true;
750760
xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef,
751761
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
762+
xContext.setOrder(i);
752763
xContext = xxContextEnricherDao.update(xContext);
753764
context = serviceDefService.populateXXToRangerContextEnricherDef(xContext);
754765
break;
@@ -758,6 +769,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
758769
XXContextEnricherDef xContext = new XXContextEnricherDef();
759770
xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef,
760771
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
772+
xContext.setOrder(i);
761773
xContext = xxContextEnricherDao.create(xContext);
762774
context = serviceDefService.populateXXToRangerContextEnricherDef(xContext);
763775
}
@@ -789,13 +801,15 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
789801
List<XXEnumElementDef> xxEnumEleDefs = xEnumEleDao.findByEnumDefId(xEnumDef.getId());
790802
List<RangerEnumElementDef> enumEleDefs = enumDef.getElements();
791803

792-
for (RangerEnumElementDef eleDef : enumEleDefs) {
804+
for (int i = 0; i < enumEleDefs.size(); i++) {
805+
RangerEnumElementDef eleDef = enumEleDefs.get(i);
793806
boolean foundEle = false;
794807
for (XXEnumElementDef xEleDef : xxEnumEleDefs) {
795808
if (eleDef.getItemId() != null && eleDef.getItemId().equals(xEleDef.getItemId())) {
796809
foundEle = true;
797810
xEleDef = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xEleDef, xEnumDef,
798811
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
812+
xEleDef.setOrder(i);
799813
xEleDef = xEnumEleDao.update(xEleDef);
800814
break;
801815
}
@@ -804,6 +818,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
804818
XXEnumElementDef xElement = new XXEnumElementDef();
805819
xElement = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xElement, xEnumDef,
806820
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
821+
xElement.setOrder(i);
807822
xElement = xEnumEleDao.create(xElement);
808823
}
809824
}
@@ -868,7 +883,8 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
868883
List<XXResourceDef> xxResourceDefs = xxResDefDao.findByServiceDefId(serviceDefId);
869884

870885
// create or update dataMasks
871-
for (RangerDataMaskTypeDef dataMask : dataMasks) {
886+
for(int i = 0; i < dataMasks.size(); i++) {
887+
RangerDataMaskTypeDef dataMask = dataMasks.get(i);
872888
boolean found = false;
873889
for (XXDataMaskTypeDef xxDataMask : xxDataMaskTypes) {
874890
if (xxDataMask.getItemId() != null && xxDataMask.getItemId().equals(dataMask.getItemId())) {
@@ -879,6 +895,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
879895
found = true;
880896
xxDataMask = serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, createdSvcDef,
881897
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
898+
xxDataMask.setOrder(i);
882899
xxDataMask = dataMaskTypeDao.update(xxDataMask);
883900
dataMask = serviceDefService.populateXXToRangerDataMaskTypeDef(xxDataMask);
884901
break;
@@ -892,6 +909,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
892909

893910
XXDataMaskTypeDef xxDataMask = new XXDataMaskTypeDef();
894911
xxDataMask = serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT);
912+
xxDataMask.setOrder(i);
895913
xxDataMask = dataMaskTypeDao.create(xxDataMask);
896914
}
897915
}
@@ -917,7 +935,7 @@ private void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<Ran
917935
for(RangerAccessTypeDef accessType : dataMaskAccessTypes) {
918936
if(! isAccessTypeInList(accessType.getName(), xxAccessTypeDefs)) {
919937
throw restErrorUtil.createRESTException("accessType with name: "
920-
+ accessType.getName() + " does not exists", MessageEnums.DATA_NOT_FOUND);
938+
+ accessType.getName() + " does not exist", MessageEnums.DATA_NOT_FOUND);
921939
}
922940
}
923941

security-admin/src/main/resources/META-INF/jpa_named_queries.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@
321321

322322
<!-- XXAccessTypeDef -->
323323
<named-query name="XXAccessTypeDef.findByServiceDefId">
324-
<query>select obj from XXAccessTypeDef obj where obj.defId = :serviceDefId</query>
324+
<query>select obj from XXAccessTypeDef obj where obj.defId = :serviceDefId order by obj.order</query>
325325
</named-query>
326326

327327
<named-query name="XXAccessTypeDef.findByNameAndServiceId">
@@ -331,7 +331,7 @@
331331

332332
<!-- XXPolicyConditionDef -->
333333
<named-query name="XXPolicyConditionDef.findByServiceDefId">
334-
<query>select obj from XXPolicyConditionDef obj where obj.defId = :serviceDefId</query>
334+
<query>select obj from XXPolicyConditionDef obj where obj.defId = :serviceDefId order by obj.order</query>
335335
</named-query>
336336

337337
<named-query name="XXPolicyConditionDef.findByServiceDefIdAndName">
@@ -367,7 +367,7 @@
367367

368368
<!-- XXDataMaskTypeDef -->
369369
<named-query name="XXDataMaskTypeDef.findByServiceDefId">
370-
<query>select obj from XXDataMaskTypeDef obj where obj.defId = :serviceDefId</query>
370+
<query>select obj from XXDataMaskTypeDef obj where obj.defId = :serviceDefId order by obj.order</query>
371371
</named-query>
372372

373373
<named-query name="XXDataMaskTypeDef.findByNameAndServiceId">

security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,13 @@ public void test12updateServiceDef() throws Exception {
465465
serviceConfigDefObj.setType("1");
466466
svcConfDefList.add(serviceConfigDefObj);
467467

468+
Mockito.when(
469+
serviceDefService.populateRangerServiceConfigDefToXX(
470+
Mockito.any(RangerServiceConfigDef.class), Mockito.any(XXServiceConfigDef.class), Mockito.any(XXServiceDef.class),
471+
Mockito.eq(RangerServiceDefService.OPERATION_CREATE_CONTEXT))).thenReturn(serviceConfigDefObj);
472+
Mockito.when(xServiceConfigDefDao.create(serviceConfigDefObj))
473+
.thenReturn(serviceConfigDefObj);
474+
468475
List<XXResourceDef> resDefList = new ArrayList<XXResourceDef>();
469476
XXResourceDef resourceDef = new XXResourceDef();
470477
resourceDef.setAddedByUserId(Id);

0 commit comments

Comments
 (0)