refactor(权限点):增加支持workspace查询;构建顶层
This commit is contained in:
parent
d4d18740e0
commit
8faa8f2cb0
@ -28,4 +28,7 @@ public class PermissionPointTreeQueryReq {
|
||||
|
||||
/** 权限点ID列表 **/
|
||||
private List<Long> ids;
|
||||
|
||||
/** 权限点terminal对应workspaceType **/
|
||||
private List<String> workspaceType;
|
||||
}
|
||||
|
||||
@ -4,14 +4,21 @@ import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.util.TreeUtil;
|
||||
import cn.axzo.framework.domain.web.BizException;
|
||||
import cn.axzo.framework.domain.web.code.BaseCode;
|
||||
import cn.axzo.tyr.client.model.DictTypeFiledEnum;
|
||||
import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum;
|
||||
import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq;
|
||||
import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp;
|
||||
import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp;
|
||||
import cn.axzo.tyr.client.model.enums.FeatureType;
|
||||
import cn.axzo.tyr.client.model.permission.PermissionPointDTO;
|
||||
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
|
||||
import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
|
||||
import cn.axzo.tyr.client.model.permission.PermissionPointVO;
|
||||
import cn.axzo.tyr.server.repository.SaasBasicDictDao;
|
||||
import cn.axzo.tyr.server.repository.entity.SaasFeature;
|
||||
import cn.axzo.tyr.server.repository.service.SaasFeatureDao;
|
||||
import cn.axzo.tyr.server.service.PermissionPointService;
|
||||
import cn.axzo.tyr.server.service.SaasBasicDictService;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -45,10 +52,15 @@ import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_TOP
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class PermissionPointServiceImpl implements PermissionPointService {
|
||||
|
||||
private final SaasFeatureDao saasFeatureDao;
|
||||
private final SaasBasicDictDao saasBasicDictDao;
|
||||
private final SaasBasicDictService saasBasicDictService;
|
||||
|
||||
@Override
|
||||
public List<PermissionPointTreeNode> listTreeNodes(PermissionPointTreeQueryReq request) {
|
||||
//条件转换 workspace --> terminal
|
||||
workspace2Terminal(request);
|
||||
//查询条件构建
|
||||
LambdaQueryWrapper<SaasFeature> queryWrapper = new LambdaQueryWrapper<SaasFeature>()
|
||||
.in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList());
|
||||
@ -72,22 +84,63 @@ public class PermissionPointServiceImpl implements PermissionPointService {
|
||||
list = null; //for GC
|
||||
|
||||
//搜索或需要按授权策略过滤 - 有额外的过滤条件
|
||||
List<PermissionPointTreeNode> result = filterTreeNode(request, treeList);
|
||||
List<PermissionPointTreeNode> nodesResult = filterTreeNode(request, treeList);
|
||||
|
||||
//指定parent后不需要顶级的工作台
|
||||
if (request.getParentId() != null) {
|
||||
return result;
|
||||
return nodesResult;
|
||||
}
|
||||
|
||||
//TODO:@Zhan 依赖系统字典接口封装上级
|
||||
//按terminal分组
|
||||
Map<String, List<PermissionPointTreeNode>> mappingNode = treeList.stream()
|
||||
.collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal));
|
||||
//构建terminal工作台层级
|
||||
//构建workspace-terminal工作台层级
|
||||
List<BasicDictTreeResp> dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData();
|
||||
//遍历所有workspace和terminal
|
||||
List<PermissionPointTreeNode> result = new ArrayList<>();
|
||||
for (BasicDictTreeResp workspace : dictList) {
|
||||
List<BasicDictTreeResp> terminals = workspace.getChildren();
|
||||
PermissionPointTreeNode workspaceNode = null;
|
||||
for (BasicDictTreeResp terminal : terminals) {
|
||||
//有对应权限点 则建立上级
|
||||
List<PermissionPointTreeNode> childrenNodes = mappingNode.get(terminal.getCode());
|
||||
if (CollectionUtil.isNotEmpty(childrenNodes)) {
|
||||
PermissionPointTreeNode terminalTree = new PermissionPointTreeNode();
|
||||
terminalTree.setPermissionName(terminal.getName());
|
||||
terminalTree.setCode(terminal.getCode());
|
||||
terminalTree.setChildren(childrenNodes);
|
||||
if (workspaceNode == null) {
|
||||
List<PermissionPointTreeNode> terminalChildren = new ArrayList<>();
|
||||
workspaceNode = new PermissionPointTreeNode();
|
||||
workspaceNode.setPermissionName(workspace.getName());
|
||||
workspaceNode.setChildren(terminalChildren);
|
||||
}
|
||||
workspaceNode.getChildren().add(terminalTree);
|
||||
}
|
||||
}
|
||||
if (workspaceNode != null) {
|
||||
result.add(workspaceNode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void workspace2Terminal(PermissionPointTreeQueryReq request) {
|
||||
if (CollectionUtil.isNotEmpty(request.getWorkspaceType())) {
|
||||
List<String> terminals = new ArrayList<>();
|
||||
BasicDictQueryReq dictReq = new BasicDictQueryReq();
|
||||
for (String workSpaceType : request.getWorkspaceType()) {
|
||||
dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType));
|
||||
dictReq.setType(DictTypeFiledEnum.TERMINAL);
|
||||
List<BasicDictNodeResp> dictList = saasBasicDictDao.getBasicDictNodeList(dictReq);
|
||||
terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList()));
|
||||
}
|
||||
request.setTerminalList(terminals);
|
||||
}
|
||||
}
|
||||
|
||||
private List<PermissionPointTreeNode> filterTreeNode(PermissionPointTreeQueryReq request, List<PermissionPointTreeNode> treeList) {
|
||||
//过滤条件
|
||||
boolean needFilter = StrUtil.isNotBlank(request.getKeyword())
|
||||
|
||||
@ -40,8 +40,10 @@ public class PermissionPointTest {
|
||||
@Test
|
||||
public void testListTreeNode() {
|
||||
PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq();
|
||||
request.setParentId(354L);
|
||||
request.setKeyword("合同");
|
||||
//request.setParentId(354L);
|
||||
request.setKeyword("预警");
|
||||
//request.setWorkspaceType(Arrays.asList("ent"));
|
||||
request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB"));
|
||||
ApiResult<List<PermissionPointTreeNode>> result = controller.listTreeNodes(request);
|
||||
System.out.println("---------------");
|
||||
System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user