菜单树的生成

权限管理想把权限菜单表做成动态的,就必须在数据库存储菜单和权限信息,也就是所谓的 rbac 权限设计,菜单分为根菜单和子菜单,用户登陆成功跳转到首页,就能看到菜单树,对应的界面,所以需要从后台向前台传递菜单树。

1.在 菜单表中需要添加对应的父级 id 字段

在这里插入图片描述

-1 表示是根菜单,需要现在 实体类添加对应子集的 List 字段,然后在 service 层,写分层树型的方法:

然后是 service 层代码:

 public HomepageMapper homePageMapper;
    //  菜单树实现
    @Override
    public List<SysMenu> menuTree(HttpServletRequest request) {
        String token = request.getHeader("token");
    //  获取用户对象
        SysUser user = (SysUser) redisUtil.get(token);
    //  获取该用户的权限集合
        List<SysMenu> menus = homePageMapper.getMenuList(user.getId());
        List<SysMenu> results = getTreeMenu(menus);
        return results;
    }

    /**
     * 获取菜单树
     * @param menus
     * @return
     */
    private List<SysMenu> getTreeMenu(List<SysMenu> menus) {
        List<SysMenu> parents = new ArrayList<>();
        for (SysMenu sysMenu : menus) {
            if (sysMenu.getMenuParentId() == 0) {
                parents.add(sysMenu);
            }
        }
        for (SysMenu parent : parents) {
            childMenu(parent, menus);
        }
        return parents;
    }

    /**
     * 获取子菜单
     * @param parent
     * @param menus
     */
    private void childMenu(SysMenu parent, List<SysMenu> menus) {
        for (SysMenu menu : menus) {
            if (menu.getMenuParentId().equals(parent.getId())) {
                parent.getChildMenu().add(menu);
                childMenu(menu, menus);
            }
        }
    }

得到结果:

{
    "code": 200,
    "msg": "查询成功",
    "data": [
        {
            "id": 16,
            "menuName": "用户",
            "menuPath": "/user",
            "menuParentId": -1,
            "authString": "user",
            "children": [
                {
                    "id": 3,
                    "menuName": "展示用户",
                    "menuPath": "/userowUser",
                    "menuParentId": 16,
                    "authString": "showUser",
                    "children": []
                },
                {
                    "id": 4,
                    "menuName": "添加用户",
                    "menuPath": "/user/addUser",
                    "menuParentId": 16,
                    "authString": "addUser",
                    "children": []
                },
                {
                    "id": 5,
                    "menuName": "删除用户",
                    "menuPath": "/user/deleteUser",
                    "menuParentId": 16,
                    "authString": "deleteUser",
                    "children": []
                },
                {
                    "id": 6,
                    "menuName": "修改用户角色",
                    "menuPath": "/user/updateUserRole",
                    "menuParentId": 16,
                    "authString": "updateUserInfo",
                    "children": []
                }
            ]
        },
        {
            "id": 17,
            "menuName": "菜单",
            "menuPath": "/menu",
            "menuParentId": -1,
            "authString": "menu",
            "children": [
                {
                    "id": 1,
                    "menuName": "展示菜单",
                    "menuPath": "/menuowMenu",
                    "menuParentId": 17,
                    "authString": "showMenu",
                    "children": []
                },
                {
                    "id": 11,
                    "menuName": "添加菜单",
                    "menuPath": "/menu/addMenu",
                    "menuParentId": 17,
                    "authString": "addMenu",
                    "children": []
                },
                {
                    "id": 12,
                    "menuName": "删除菜单",
                    "menuPath": "/menu/deleteMenu",
                    "menuParentId": 17,
                    "authString": "deleteMenu",
                    "children": []
                },
                {
                    "id": 15,
                    "menuName": "设置父级菜单",
                    "menuPath": "/menutParentMenu",
                    "menuParentId": 17,
                    "authString": "setParentMenu",
                    "children": []
                }
            ]
        },
        {
            "id": 18,
            "menuName": "角色",
            "menuPath": "/role",
            "menuParentId": -1,
            "authString": "role",
            "children": [
                {
                    "id": 2,
                    "menuName": "展示角色",
                    "menuPath": "/roleowRole",
                    "menuParentId": 18,
                    "authString": "showRole",
                    "children": []
                },
                {
                    "id": 7,
                    "menuName": "添加角色",
                    "menuPath": "/role/addRole",
                    "menuParentId": 18,
                    "authString": "addRole",
                    "children": []
                },
                {
                    "id": 8,
                    "menuName": "删除角色",
                    "menuPath": "/role/deleteRole",
                    "menuParentId": 18,
                    "authString": "deleteRole",
                    "children": []
                },
                {
                    "id": 9,
                    "menuName": "修改角色信息",
                    "menuPath": "/role/updateRole",
                    "menuParentId": 18,
                    "authString": "updateRole",
                    "children": []
                },
                {
                    "id": 10,
                    "menuName": "添加角色权限",
                    "menuPath": "/roletRoleAuth",
                    "menuParentId": 18,
                    "authString": "setRoleAuth",
                    "children": []
                }
            ]
        }
    ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值