de/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java
2022-12-22 22:53:12 +08:00

110 lines
3.7 KiB
Java

package io.dataease.service.authModel;
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 io.dataease.ext.*;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* Author: wangjiahao
* Date: 2021/11/24
* Description:
*/
@Service
public class VAuthModelService {
@Resource
private ExtVAuthModelMapper extVAuthModelMapper;
public List<VAuthModelDTO> queryAuthModel(VAuthModelRequest request) {
request.setUserId(String.valueOf(AuthUtils.getUser().getUserId()));
List<VAuthModelDTO> result = extVAuthModelMapper.queryAuthModel(request);
if(CollectionUtils.isEmpty(result)){
return new ArrayList<>();
}
if (request.getPrivileges() != null) {
result = filterPrivileges(request, result);
}
if (request.isClearEmptyDir()) {
List<VAuthModelDTO> vAuthModelDTOS = TreeUtils.mergeTree(result);
setAllLeafs(vAuthModelDTOS);
removeEmptyDir(vAuthModelDTOS);
return vAuthModelDTOS;
}
return TreeUtils.mergeTree(result);
}
private List<VAuthModelDTO> filterPrivileges(VAuthModelRequest request, List<VAuthModelDTO> result) {
if(AuthUtils.getUser().getIsAdmin()){
return result;
}
if (request.getPrivileges() != null) {
result = result.stream().filter(vAuthModelDTO -> "spine".equalsIgnoreCase(vAuthModelDTO.getNodeType())
|| ("leaf".equalsIgnoreCase(vAuthModelDTO.getNodeType())
&& vAuthModelDTO.getPrivileges() != null
&& vAuthModelDTO.getPrivileges().contains(request.getPrivileges()))).collect(Collectors.toList());
}
return result;
}
private void removeEmptyDir(List<VAuthModelDTO> result) {
if (CollectionUtils.isEmpty(result)) {
return;
}
Iterator<VAuthModelDTO> iterator = result.listIterator();
while (iterator.hasNext()) {
VAuthModelDTO tmp = iterator.next();
if ("spine".equalsIgnoreCase(tmp.getNodeType()) && tmp.getAllLeafs() == 0) {
iterator.remove();
} else {
removeEmptyDir(tmp.getChildren());
}
}
}
private void setAllLeafs(List<VAuthModelDTO> result) {
for (VAuthModelDTO vAuthModelDTO : result) {
if (CollectionUtils.isEmpty(vAuthModelDTO.getChildren())) {
vAuthModelDTO.setAllLeafs(0);
continue;
}
long leafs = 0L;
for (VAuthModelDTO child : vAuthModelDTO.getChildren()) {
if ("leaf".equalsIgnoreCase(child.getNodeType())) {
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 ("leaf".equalsIgnoreCase(childChild.getNodeType())) {
leafs = leafs + 1;
} else {
leafs = +leafs + getLeafs(childChild);
}
}
child.setAllLeafs(leafs);
return leafs;
}
}