Java递归生成多层级权限树工具类

标题递归生成一个权限树,可通过以下过程实现:

1.首先从权限数据表中获取所有节点

2.遍历所有节点,获取所有parentId为空的根节点

3.为根节点建立次级子节点树并拼接上。
3.通过递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。
每条权限有自己的id、父节点parentId、权限名称name、权限还拥有次级权限children。

权限树Dto

/**
 * @author Liby
 * @date 2022-05-16 11:35
 * @description:返回前端Dto
 * @version:
 */

public class PermissionTreeDto {
    private Integer id;
    private Integer parentID;
    private String fullName;
    private List<PermissionTreeDto> children;
    private String appId;
    private String appTypeCode;
    private String permType;
    private String menuUrl;
    private String icon;
    .........
    .........
    }

设置权限树工具类

package com.bairuitech.anychat.app.util;

import com.bairuitech.anychat.app.dto.PermissionTreeDto;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Liby
 * @date 2022-05-18 10:54
 * @description:生成权限树
 * @version:
 */

public class PermissionTreeUtil {
    /**
    * 递归设置树
    */

    public static  List<PermissionTreeDto> setPermissionTree(List<PermissionTreeDto> allPermissionList) {
        //根节点
        List<PermissionTreeDto> rootList = new ArrayList();
        //子节点
        List<PermissionTreeDto> childList = new ArrayList();
        //遍历所有节点,将所有根节点放入rootList集合中
        for (PermissionTreeDto permission : allPermissionList) {
            if (permission.getParentID() == null) {
                rootList.add(permission);
            }
        }
        //遍历根节点设置子节点
        for (PermissionTreeDto permission : rootList) {
            childList = getChildren(permission.getId(), allPermissionList);
            permission.setChildren(childList);
        }
        return rootList;

    }

  /**
  *  递归获取树的子节点
  */

    private static List<PermissionTreeDto> getChildren(Integer id, List<PermissionTreeDto> allList) {
        //存放子节点
        ArrayList<PermissionTreeDto> childList = new ArrayList();
        //遍历所有节点,如果该节点的parentId等于传过来的id,则该节点为子节点
        for (PermissionTreeDto permission : allList) {
            if (permission.getParentID() != null && permission.getParentID().equals(id)) {
                childList.add(permission);
            }
        }
        //递归设置子节点的子节点
        for (PermissionTreeDto permission : childList) {
            permission.setChildren(getChildren(permission.getId(), allList));
        }
        //如果没有子节点则返回空集合
        if (childList.size() == 0) {
            return new ArrayList<>();
        }
        return childList;
    }
}

获取权限接口

 @PostMapping("/getAppPermission")
        List<BasePermission> allPermissionList = permissionService.getAllByPermType();
        //实体转换
        List<PermissionTreeDto> adminPermissionList = BeanConvertUtil.copyListProperties(allPermissionList, PermissionTreeDto::new);
        //生成权限树
        List<PermissionTreeDto> permissionTree = PermissionTreeUtil.setPermissionTree(adminPermissionList);
        return ResultModel.success(permissionTree);
    }

结果可以看到生成了多层级的权限树
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值