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 803e873..c7bbec0 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 @@ -9,16 +9,13 @@ import cn.axzo.karma.client.feign.tyr.response.ExamineDpColumnsResp; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.springframework.stereotype.Component; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * @author likunpeng @@ -43,10 +40,10 @@ public class DataPermissionResponseExecutor { public void processNode(DataPermissionContextHolder.DataPermissionContext context, JsonNode dataNode) { DataPermission dataPermission = context.getDataPermission(); - List orgNodeIdAndPersonIds = Lists.newArrayList(); - recursiveGetOrgNodeIdAndPersonIds(dataPermission, dataNode, orgNodeIdAndPersonIds); - if (CollectionUtils.isEmpty(orgNodeIdAndPersonIds)) { - log.warn("api result has no organizationalNodeId and personId, not examine data permission for result columns."); + Set personIds = Sets.newHashSet(); + recursiveGetPersonIds(dataPermission, dataNode, personIds); + if (CollectionUtils.isEmpty(personIds)) { + log.warn("api result has no personId, not examine data permission for result columns."); return; } ExamineDpColumnsReq request = ExamineDpColumnsReq.builder() @@ -54,7 +51,7 @@ public class DataPermissionResponseExecutor { .ouId(context.getOuId()) .personId(context.getPersonId()) .workspaceId(context.getWorkspaceId()) - .resultOrgNodeIdAndPersonIds(orgNodeIdAndPersonIds) + .resultPersonIds(personIds) .build(); // 调用karma获取数据列的校验结果 ExamineDpColumnsResp examineDpColumnsResp = RpcInternalUtil.rpcProcessor(() -> dataObjectApi.examineDpColumns(request), "data permission processNode", request).getData(); @@ -62,15 +59,13 @@ public class DataPermissionResponseExecutor { return; } // 根据karma数据列的校验结果,处理api结果的数据对象 - recursiveProcessOrgNodeIdAndPersonIds(dataPermission, dataNode, examineDpColumnsResp.getAttributeDpResultMap()); + recursiveProcessPersonIds(dataPermission, dataNode, examineDpColumnsResp.getAttributeDpResultMap()); } - private void recursiveGetOrgNodeIdAndPersonIds(DataPermission dataPermission, JsonNode dataNode, List orgNodeIdAndPersonIds) { + private void recursiveGetPersonIds(DataPermission dataPermission, JsonNode dataNode, Set personIds) { if (dataNode.isObject()) { - Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermission.key_organizationalNodeId())) ? dataNode.get(dataPermission.key_organizationalNodeId()).asLong() : 0L; - Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : 0L; - if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) { - orgNodeIdAndPersonIds.add(ExamineDpColumnsReq.OrgNodeIdAndPersonId.builder().organizationalNodeId(resultOrganizationalNodeId).personId(resultPersonId).build()); + if (Objects.nonNull(dataNode.get(dataPermission.key_personId()))) { + personIds.add(dataNode.get(dataPermission.key_personId()).asLong()); } // 循环处理子field Iterator> fields = dataNode.fields(); @@ -78,7 +73,7 @@ public class DataPermissionResponseExecutor { Map.Entry entry = fields.next(); JsonNode value = entry.getValue(); if (value.isContainerNode()) { - recursiveGetOrgNodeIdAndPersonIds(dataPermission, value, orgNodeIdAndPersonIds); + recursiveGetPersonIds(dataPermission, value, personIds); } } } @@ -87,18 +82,18 @@ public class DataPermissionResponseExecutor { Iterator elements = arrayNode.elements(); while (elements.hasNext()) { JsonNode element = elements.next(); - recursiveGetOrgNodeIdAndPersonIds(dataPermission, element, orgNodeIdAndPersonIds); + recursiveGetPersonIds(dataPermission, element, personIds); } } } - private void recursiveProcessOrgNodeIdAndPersonIds(DataPermission dataPermission, JsonNode dataNode, - Map> attributeDpResultMap) { + private void recursiveProcessPersonIds(DataPermission dataPermission, JsonNode dataNode, + Map> attributeDpResultMap) { if (dataNode.isObject()) { - Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermission.key_organizationalNodeId())) ? dataNode.get(dataPermission.key_organizationalNodeId()).asLong() : 0L; - Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : 0L; - if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) { - Map attributeMap = attributeDpResultMap.get(resultOrganizationalNodeId + "_" + resultPersonId); + Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : null; + + if (Objects.nonNull(resultPersonId)) { + Map attributeMap = attributeDpResultMap.get(resultPersonId); if (MapUtils.isNotEmpty(attributeMap)) { for (Map.Entry entry : attributeMap.entrySet()) { ExamineDpColumnsResp.AttributePermissionBasicDTO basic = entry.getValue(); @@ -121,7 +116,7 @@ public class DataPermissionResponseExecutor { Map.Entry entry = fields.next(); JsonNode value = entry.getValue(); if (value.isContainerNode()) { - recursiveProcessOrgNodeIdAndPersonIds(dataPermission, value, attributeDpResultMap); + recursiveProcessPersonIds(dataPermission, value, attributeDpResultMap); } } } @@ -131,7 +126,7 @@ public class DataPermissionResponseExecutor { Iterator elements = arrayNode.elements(); while (elements.hasNext()) { JsonNode element = elements.next(); - recursiveProcessOrgNodeIdAndPersonIds(dataPermission, element, attributeDpResultMap); + recursiveProcessPersonIds(dataPermission, element, attributeDpResultMap); } } }