diff --git a/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java b/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java index 618409b9f5..8210c83aa4 100644 --- a/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java @@ -12,5 +12,8 @@ import lombok.Data; public class VAuthModelRequest extends VAuthModelDTO { private String userId; + private String privileges; + private Integer datasetMode; + private boolean clearEmptyDir; } diff --git a/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java b/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java index 6fbb6fe4a3..a3ce5a3978 100644 --- a/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java +++ b/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java @@ -17,4 +17,5 @@ public class VAuthModelDTO extends VAuthModelWithBLOBs implements ITreeBase children; + private long allLeafs = 0l; } diff --git a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java index 7224451b34..a7f0a68272 100644 --- a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java +++ b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java @@ -5,10 +5,13 @@ import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.authModel.VAuthModelRequest; import io.dataease.dto.authModel.VAuthModelDTO; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; /** * Author: wangjiahao @@ -21,9 +24,88 @@ public class VAuthModelService { @Resource private ExtVAuthModelMapper extVAuthModelMapper; - public List queryAuthModel(VAuthModelRequest request){ + public List queryAuthModel(VAuthModelRequest request) { request.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); List result = extVAuthModelMapper.queryAuthModel(request); - return TreeUtils.mergeTree(result ); + result = filterData(request, result); + List vAuthModelDTOS = TreeUtils.mergeTree(result); + if (request.isClearEmptyDir()) { + setAllLeafs(vAuthModelDTOS); + removeEmptyDir(vAuthModelDTOS); + } + return vAuthModelDTOS; + } + + private List filterData(VAuthModelRequest request, List result){ + if (request.getDatasetMode() != null && request.getDatasetMode() == 1) { + result = result.stream().filter(vAuthModelDTO -> { + if (vAuthModelDTO.getNodeType().equalsIgnoreCase("spine") || (vAuthModelDTO.getNodeType().equalsIgnoreCase("leaf") && vAuthModelDTO.getMode().equals(1L)) && !vAuthModelDTO.getModelInnerType().equalsIgnoreCase("excel") && !vAuthModelDTO.getModelInnerType().equalsIgnoreCase("custom")) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + } + if (request.getPrivileges() != null) { + result = result.stream().filter(vAuthModelDTO -> { + if (vAuthModelDTO.getNodeType().equalsIgnoreCase("spine") || (vAuthModelDTO.getNodeType().equalsIgnoreCase("leaf") && vAuthModelDTO.getPrivileges() != null && vAuthModelDTO.getPrivileges().contains(request.getPrivileges()))) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + } + return result; + } + + private void removeEmptyDir(List result) { + if (CollectionUtils.isEmpty(result)) { + return; + } + Iterator iterator = result.listIterator(); + while (iterator.hasNext()) { + VAuthModelDTO tmp = (VAuthModelDTO) iterator.next(); + if (tmp.getNodeType().equalsIgnoreCase("spine") && tmp.getAllLeafs() == 0) { + iterator.remove(); + } else { + removeEmptyDir(tmp.getChildren()); + } + } + } + + private void setAllLeafs(List result) { + for (VAuthModelDTO vAuthModelDTO : result) { + if (CollectionUtils.isEmpty(vAuthModelDTO.getChildren())) { + vAuthModelDTO.setAllLeafs(0); + continue; + } + long leafs = 0l; + for (VAuthModelDTO child : vAuthModelDTO.getChildren()) { + if (child.getNodeType().equalsIgnoreCase("leaf")) { + leafs = leafs + 1; + } else { + leafs = +leafs + getLeafs(child); + } + } + vAuthModelDTO.setAllLeafs(leafs); + } + } + + private long getLeafs(VAuthModelDTO child) { + long leafs = 0l; + if (CollectionUtils.isEmpty(child.getChildren())) { + child.setAllLeafs(0); + return leafs; + } + for (VAuthModelDTO childChild : child.getChildren()) { + if (childChild.getNodeType().equalsIgnoreCase("leaf")) { + leafs = leafs + 1; + } else { + leafs = +leafs + getLeafs(childChild); + } + } + child.setAllLeafs(leafs); + return leafs; } } + diff --git a/frontend/src/views/chart/view/TableSelector.vue b/frontend/src/views/chart/view/TableSelector.vue index 0741875729..ebfdc2a107 100644 --- a/frontend/src/views/chart/view/TableSelector.vue +++ b/frontend/src/views/chart/view/TableSelector.vue @@ -1,7 +1,7 @@