feat:(REQ-2545) 菜单树查询时,过滤掉菜单下面没有页面的权限数据

This commit is contained in:
lilong 2024-07-09 18:35:23 +08:00
parent b82206fb67
commit 9ea27b3051
2 changed files with 38 additions and 10 deletions

View File

@ -38,9 +38,9 @@ public class TreePermissionReq {
private List<FeatureResourceType> featureResourceTypes; private List<FeatureResourceType> featureResourceTypes;
/** /**
* 父节点id * 菜单节点的uniCode
*/ */
private Long parentFeatureId; private String uniCode;
/** /**
* 是否需要返回权限码 * 是否需要返回权限码

View File

@ -306,6 +306,8 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
.sort(Lists.newArrayList("displayOrder__ASC")) .sort(Lists.newArrayList("displayOrder__ASC"))
.build()); .build());
// 有可能存在资源树被删除的情况 // 有可能存在资源树被删除的情况
// 因为会存在用户只有菜单权限下面没有节点这种需要过滤掉
saasFeatureResources = filterFeature(saasFeatureResources);
if (CollectionUtils.isEmpty(saasFeatureResources)) { if (CollectionUtils.isEmpty(saasFeatureResources)) {
return Collections.emptyList(); return Collections.emptyList();
} }
@ -329,6 +331,37 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
(Function<TreePermissionResp, Boolean>) e -> Objects.equals(DISPLAY_STATUS, e.getStatus())); (Function<TreePermissionResp, Boolean>) e -> Objects.equals(DISPLAY_STATUS, e.getStatus()));
} }
private List<SaasFeatureResourceResp> filterFeature(List<SaasFeatureResourceResp> saasFeatureResources) {
if (CollectionUtils.isEmpty(saasFeatureResources)) {
return Collections.emptyList();
}
List<SaasFeatureResourceResp> excludeMenuFeatures = saasFeatureResources.stream()
.filter(e -> Objects.equals(DISPLAY_STATUS, e.getStatus()))
.filter(e -> !Objects.equals(FeatureResourceType.MENU.getCode(), e.getFeatureType()))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(excludeMenuFeatures)) {
return Collections.emptyList();
}
// 根据页面找父级所有菜单节点
Set<Long> excludeMenuFeatureIds = excludeMenuFeatures.stream()
.map(e -> Lists.newArrayList(e.getPath().split(",")))
.flatMap(Collection::stream)
.filter(Objects::nonNull)
.map(Long::valueOf)
.collect(Collectors.toSet());
List<SaasFeatureResourceResp> menuFeatures = saasFeatureResources.stream()
.filter(e -> excludeMenuFeatureIds.contains(e.getId()))
.filter(e -> Objects.equals(FeatureResourceType.MENU.getCode(), e.getFeatureType()))
.collect(Collectors.toList());
excludeMenuFeatures.addAll(menuFeatures);
return excludeMenuFeatures;
}
private List<ProductFeatureRelationVO> getProductFeatureRelationByWorkspace(Set<Long> workspaceIds) { private List<ProductFeatureRelationVO> getProductFeatureRelationByWorkspace(Set<Long> workspaceIds) {
List<ServicePkgDetailRes> servicePkgDetailRes = RpcInternalUtil.rpcListProcessor(() -> servicePkgClient.getServicePkgDetailBySpaceId(workspaceIds), List<ServicePkgDetailRes> servicePkgDetailRes = RpcInternalUtil.rpcListProcessor(() -> servicePkgClient.getServicePkgDetailBySpaceId(workspaceIds),
"查询租户的产品", workspaceIds).getData(); "查询租户的产品", workspaceIds).getData();
@ -569,7 +602,7 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
List<Long> featureIds = resolveFeatureIds(treePermissionReq); List<Long> featureIds = resolveFeatureIds(treePermissionReq);
if (Objects.nonNull(treePermissionReq.getParentFeatureId()) && CollectionUtils.isEmpty(featureIds)) { if (StringUtils.isNotBlank(treePermissionReq.getUniCode()) && CollectionUtils.isEmpty(featureIds)) {
return Collections.emptySet(); return Collections.emptySet();
} }
@ -632,17 +665,12 @@ public class PermissionQueryServiceImpl implements PermissionQueryService {
} }
private List<Long> resolveFeatureIds(TreePermissionReq treePermissionReq) { private List<Long> resolveFeatureIds(TreePermissionReq treePermissionReq) {
if (Objects.isNull(treePermissionReq.getParentFeatureId())) { if (StringUtils.isBlank(treePermissionReq.getUniCode())) {
return Collections.emptyList(); return Collections.emptyList();
} }
List<Integer> featureTypes = Optional.ofNullable(treePermissionReq.getFeatureResourceTypes())
.map(e -> e.stream().map(FeatureResourceType::getCode).collect(Collectors.toList()))
.orElse(null);
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
.parentId(treePermissionReq.getParentFeatureId()) .uniCodes(Sets.newHashSet(treePermissionReq.getUniCode()))
.featureResourceTypes(featureTypes)
.build(); .build();
return featureResourceService.list(pageSaasFeatureResourceReq).stream() return featureResourceService.list(pageSaasFeatureResourceReq).stream()
.map(SaasFeatureResourceResp::getId) .map(SaasFeatureResourceResp::getId)