diff --git a/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/advice/DataPermissionResponseExecutor.java b/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/advice/DataPermissionResponseExecutor.java index 5ec2816..a17094f 100644 --- a/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/advice/DataPermissionResponseExecutor.java +++ b/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/advice/DataPermissionResponseExecutor.java @@ -60,17 +60,25 @@ public class DataPermissionResponseExecutor { return; } // 根据karma数据列的校验结果,处理api结果的数据对象 - recursiveGetOrgNodeIdAndPersonIds(dataPermissionPrepare, dataNode, examineDpColumnsResp.getAttributeDpResultMap()); + recursiveProcessOrgNodeIdAndPersonIds(dataPermissionPrepare, dataNode, examineDpColumnsResp.getAttributeDpResultMap()); } private void recursiveGetOrgNodeIdAndPersonIds(DataPermissionPrepare dataPermissionPrepare, JsonNode dataNode, List orgNodeIdAndPersonIds) { if (dataNode.isObject()) { Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermissionPrepare.key_organizationalNodeId())) ? dataNode.get(dataPermissionPrepare.key_organizationalNodeId()).asLong() : 0L; Long resultPersonId = Objects.nonNull(dataNode.get(dataPermissionPrepare.key_personId())) ? dataNode.get(dataPermissionPrepare.key_personId()).asLong() : 0L; - if (resultOrganizationalNodeId.equals(0L) && resultPersonId.equals(0L)) { - return; + if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) { + orgNodeIdAndPersonIds.add(ExamineDpColumnsReq.OrgNodeIdAndPersonId.builder().organizationalNodeId(resultOrganizationalNodeId).personId(resultPersonId).build()); + } + // 循环处理子field + Iterator> fields = dataNode.fields(); + while (fields.hasNext()) { + Map.Entry entry = fields.next(); + JsonNode value = entry.getValue(); + if (value.isContainerNode()) { + recursiveGetOrgNodeIdAndPersonIds(dataPermissionPrepare, value, orgNodeIdAndPersonIds); + } } - orgNodeIdAndPersonIds.add(ExamineDpColumnsReq.OrgNodeIdAndPersonId.builder().organizationalNodeId(resultOrganizationalNodeId).personId(resultPersonId).build()); } if (dataNode.isArray()) { ArrayNode arrayNode = (ArrayNode) dataNode; @@ -82,31 +90,36 @@ public class DataPermissionResponseExecutor { } } - private void recursiveGetOrgNodeIdAndPersonIds(DataPermissionPrepare dataPermissionPrepare, JsonNode dataNode, + private void recursiveProcessOrgNodeIdAndPersonIds(DataPermissionPrepare dataPermissionPrepare, JsonNode dataNode, Map> attributeDpResultMap) { if (dataNode.isObject()) { Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermissionPrepare.key_organizationalNodeId())) ? dataNode.get(dataPermissionPrepare.key_organizationalNodeId()).asLong() : 0L; Long resultPersonId = Objects.nonNull(dataNode.get(dataPermissionPrepare.key_personId())) ? dataNode.get(dataPermissionPrepare.key_personId()).asLong() : 0L; - if (resultOrganizationalNodeId.equals(0L) && resultPersonId.equals(0L)) { - return; + if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) { + Map attributeMap = attributeDpResultMap.get(resultOrganizationalNodeId + "_" + resultPersonId); + if (MapUtils.isNotEmpty(attributeMap)) { + for (Map.Entry entry : attributeMap.entrySet()) { + ExamineDpColumnsResp.AttributePermissionBasicDTO basic = entry.getValue(); + if (dataNode.has(basic.getAttrCode())) { + ObjectNode objectNode = (ObjectNode) dataNode; + if (!ATTRIBUTE_ISUNMASKABLE.equals(basic.getIsUnmaskable())) { + objectNode.remove(basic.getAttrCode()); + } + if (Objects.nonNull(basic.getIsEditable())) { + objectNode.put(ATTRIBUTE_ADD_ALLOW_EDIT_PREFIX + basic.getAttrCode(), ATTRIBUTE_ISEDITABLE.equals(basic.getIsEditable())); + } + } + } + } } - Map attributeMap = attributeDpResultMap.get(resultOrganizationalNodeId + "_" + resultPersonId); - if (MapUtils.isEmpty(attributeMap)) { - return; - } - - for (Map.Entry entry : attributeMap.entrySet()) { - ExamineDpColumnsResp.AttributePermissionBasicDTO basic = entry.getValue(); - if (dataNode.has(basic.getAttrCode())) { - if (!ATTRIBUTE_ISUNMASKABLE.equals(basic.getIsUnmaskable())) { - ObjectNode objectNode = (ObjectNode) dataNode; - objectNode.remove(basic.getAttrCode()); - } - if (Objects.nonNull(basic.getIsEditable())) { - ObjectNode objectNode = (ObjectNode) dataNode; - objectNode.put(ATTRIBUTE_ADD_ALLOW_EDIT_PREFIX + basic.getAttrCode(), ATTRIBUTE_ISEDITABLE.equals(basic.getIsEditable())); - } + // 循环处理子field + Iterator> fields = dataNode.fields(); + while (fields.hasNext()) { + Map.Entry entry = fields.next(); + JsonNode value = entry.getValue(); + if (value.isContainerNode()) { + recursiveProcessOrgNodeIdAndPersonIds(dataPermissionPrepare, value, attributeDpResultMap); } } } @@ -116,7 +129,7 @@ public class DataPermissionResponseExecutor { Iterator elements = arrayNode.elements(); while (elements.hasNext()) { JsonNode element = elements.next(); - recursiveGetOrgNodeIdAndPersonIds(dataPermissionPrepare, element, attributeDpResultMap); + recursiveProcessOrgNodeIdAndPersonIds(dataPermissionPrepare, element, attributeDpResultMap); } } }