rbac模型菜单的递归

简介: rbac模型菜单的递归


image.png

1.实体类

public class SysPermissionVO extends BaseEntity implements Serializable {
    /**
     * 权限 ID
     */
    private Long id;
    /**
     * 父权限 ID (0为顶级菜单)
     */
    private Long parentId;
    /**
     * 权限名称
     */
    private String name;
    /**
     * 授权标识符
     */
    private String code;
    /**
     * 授权路径
     */
    private String url;
    /**
     * 类型(1菜单,2按钮)
     */
    private Integer type;
    /**
     * 图标
     */
    private String icon;
    /**
     * 备注
     */
    private String remark;
    private String createDate;
    private String updateDate;
    /**
     * 菜单顺序
     */
    private String numOrder;
    /**
     * 系统id
     */
    private String system;
    private String createUser;
    private String updateUser;
    /**
     * 菜单编号
     */
    private String menuNumber;
    private List<SysPermissionVO> childMenus;
}

2.递归方法

public class MenuTreeUtil {
    /**
     * 获取菜单树 获取顶层
     * 
     * @param listSysPermissionVO
     * @param applicationVO 应用信息
     * @return
     */
    public static SysPermissionVO getMenuTree(List<SysPermissionVO> listSysPermissionVO,
        SysPermissionVO applicationVO) {
        // 加入首层
        List<SysPermissionVO> resultList = new ArrayList<>();
        for (SysPermissionVO sysPermissionVO : listSysPermissionVO) {
            if (Long.valueOf(0).equals(sysPermissionVO.getParentId())) {
                List<SysPermissionVO> childTree = addChildMenu(sysPermissionVO, listSysPermissionVO);
                sysPermissionVO.setChildMenus(childTree);
                resultList.add(sysPermissionVO);
            }
        }
        applicationVO.setChildMenus(resultList);
        return applicationVO;
    }
    /**
     * 递归方法
     * 
     * @param sysPermissionVO
     * @param listSysPermissionVO
     * @return
     */
    private static List<SysPermissionVO> addChildMenu(SysPermissionVO sysPermissionVO,
        List<SysPermissionVO> listSysPermissionVO) {
        List<SysPermissionVO> childList = new ArrayList<>();
        for (SysPermissionVO permissionVO : listSysPermissionVO) {
            if (sysPermissionVO.getId().equals(permissionVO.getParentId())) {
                List<SysPermissionVO> childMenu = addChildMenu(permissionVO, listSysPermissionVO);
                permissionVO.setChildMenus(childMenu);
                childList.add(permissionVO);
            }
        }
        return childList;
    }
}

3.conteoller

public Result<SysPermissionVO> selectPermissionTree(
         SysPermissionVO sysPermissionVO) {
        Result<SysPermissionVO> resultVO = new Result<>();
        // 按照序号排序
        PageHelper.orderBy(sysPermissionVO.getNumOrder());
        // 获取当前应用的所有
        List<SysPermissionVO> resultListSysPermission = sysPermissionService.querySysPermissionAll(sysPermissionVO);
        // 应用信息拼装
        SysPermissionVO applicationVO = new SysPermissionVO();
        applicationVO.setId(Long.valueOf(0));
        applicationVO.setSystem(sysPermissionVO.getSystem());
        // 获取树
        SysPermissionVO resultMenu = MenuTreeUtil.getMenuTree(resultListSysPermission, applicationVO);
        resultVO.setData(resultMenu);
        // 分页总数
        return resultVO;
    }


相关文章
|
8月前
若依框架 --- 菜单已分配,无法删除解决
若依框架 --- 菜单已分配,无法删除解决
433 1
|
8月前
|
算法 前端开发 JavaScript
若依框架---数据转树状层级
若依框架---数据转树状层级
585 0
|
数据库 数据安全/隐私保护
手把手教你搞定菜单权限设计,精确到按钮级别,建议收藏(一)
在实际的项目开发过程中,菜单权限功能可以说是后端管理系统中必不可少的一个环节,根据业务的复杂度,设计的时候可深可浅,但无论怎么变化,设计的思路基本都是围绕着用户、角色、菜单进行相应的扩展。
4824 0
手把手教你搞定菜单权限设计,精确到按钮级别,建议收藏(一)
|
5月前
|
前端开发 数据库
Tree树形控件--删除分级菜单中的某一个、删除后的树形结构仍然是对应目录下的展开效果、二次删除确认、删除成功提示
这篇文章提供了一种删除Tree树形控件中分级菜单项的方法,包括实现流程、代码示例和操作效果展示,涉及二次确认和删除成功提示。
|
8月前
使用递归的方式删除菜单
使用递归的方式删除菜单
47 1
|
8月前
|
JavaScript
什么是递归树状菜单
什么是递归树状菜单
|
8月前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
152 0
|
8月前
|
Kubernetes API 数据安全/隐私保护
k8s学习-基于角色的权限控制RBAC(概念,模版,创建,删除等)
k8s学习-基于角色的权限控制RBAC(概念,模版,创建,删除等)
260 0
|
缓存 JSON NoSQL
分类树菜单,我从2s优化到0.1s
分类树菜单,我从2s优化到0.1s
|
分布式数据库
二叉树的详细实现(含递归展开图)
二叉树的详细实现(含递归展开图)
129 0
二叉树的详细实现(含递归展开图)