要求: 获取用户能操作的资源集合,这里主要考虑菜单树的获取
框架: springboot + hibernate
场景: 当我们传入一个单独的次级目录时,我们需要查出这个次级目录的根目录以及父目录,同时查出这个次级目录的所有子目录。
思路: 为次级目录补足上层及根目录,再查出该根目录下的次级目录的所有子目录。
补足目录的算法逻辑。
算法逻辑: 传入资源节点NodeList.,以及rootNode.
1. 如果资源为递归树结构 并且查询条件要求按树形结构展示,则返回结果以树形结构展示,补足list中的拥有子节点的根节点。
2. 新建资源节点的ID集合idList和资源节点集合parentList,然后对资源节点NodeList进行遍历,将节点ID存到idList.
3. 遍历资源节点NodeList,并对每一个节点进行判断,条件是:当前节点不是根节点,并且当前节点的父节点不在集合idList中。
4. 结果为True,则添加该节点资源到 parentList。false则不进行添加。
5,对3.4步进行递归。
6. 资源节点添加parentList集合。
功能实现:
1.controller层
UserResourceGetConditionDto 类UserResourceGetResultDto类
/**
* 获取用户能操作的资源集合
* @return 资源集合
*/
@ApiOperation(value="获取业务系统用户能操作的资源集合")
@ResponseBody
@RequestMapping(value = "/resources/get", method = RequestMethod.POST)
public ResponseEntity<CommonResponse<List<UserResourceGetResultDto>>> getResourcesByUser(@RequestBody UserResourceGetConditionDto conditionDto) {
List<UserResourceGetResultDto> permissionDtos = privilageCheckService.getResourcesByUser(conditionDto, false);
return CommonResponse.buildRespose4Success(permissionDtos,"操作成功").toResponseEntity();
}
- Service层:
/**
* 获取用户能操作的资源集合
* @param conditionDto 查询条件
* @param isQueryAdminRole 是否为超级管理员做授权
* @return 资源集合
*/
@Override
public List<UserResourceGetResultDto> getResourcesByUser(UserResourceGetConditionDto conditionDto, boolean isQueryAdminRole) {
ResourceTypeEnum resourceType = ResourceTypeEnum.get(conditionDto.getResourceTyp