若依框架给特定用户增加权限


需求就是公司想让某个特定的用户拥有和这个用户所属角色不一样的权限,比如说张三这个角色是销售角色,这个角色只有订单和客户这两个菜单的权限,但是就是让她要有员工管理等权限,所以得根据张三这个特定用户来给他分配权限,翻了翻代码,想了想,在给这个用户分配权限的时候,在她这个角色的基础上再追加就行了

思路

先建一个表,这个表是存放这个角色追加的菜单id在这里插入图片描述
然后我们在该角色管理界面给他分配相应的权限把这个表给填充起来在前端页面画这么个页面就行了
这时候我们就给他分配完追加的权限,接下来是怎么把分配的权限给他应用上,翻代码吧

前端vue代码

像这个菜单肯定是在整体布局的左边,所以我们去找sidebar这个文件夹可以看见这里面是有菜单使用的,数据是sidebarRouters
接下来我们这要找到这个sidebarRouters数据就行了,找了半天发现这是一个getter全局属性,在store数据库里在这里插入图片描述
根据这个getter我们可以知道她是在permission里取得数据,接下来去这个文件里找就行了在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从这里我们就可以看出菜单的数据是在这里得到的,我们只要去后台找到这个数据集合并讲我们追加的数据给他追加上就行了

后端vue代码

在这里插入图片描述
从这我们已经能看到菜单的集合是在selectMenuTreeByUserId这个service里得到的,改就完事了

 /**
     * 根据用户ID查询菜单
     * 
     * @param userId 用户名称
     * @return 菜单列表
     */
    @Override
    public List<SysMenu> selectMenuTreeByUserId(Long userId)
    {
        List<SysMenu> menus = null;
        if (SecurityUtils.isAdmin(userId))
        {
            menus = menuMapper.selectMenuTreeAll();
        }
        else
        {
            //可分配的全部菜单
            List<SysMenu> sysMenus = menuMapper.selectMenuTreeByMenuId();
            //权限菜单
            menus = menuMapper.selectMenuTreeByUserId(userId);
            //当前用户附加的菜单权限
            List<MenuAllow> menuAllows = menuAllowMapper.selectMenuAllowListByUserIdTwo(userId);
            if(menuAllows != null && menuAllows.size() > 0){
                for (int i = 0; i < menuAllows.size(); i++) {
                    for (int j = 0; j < menus.size(); j++) {
                        if(menuAllows.get(i).getMenuIdTwo().equals(menus.get(j).getMenuId())){
                            menuAllows.remove(i);
                            i--;
                            break;
                        }
                    }
                }
            }
            if(menuAllows != null && menuAllows.size() > 0){
                for (int i = 0; i < menuAllows.size(); i++) {
                    for (int j = 0; j < sysMenus.size(); j++) {
                        if(menuAllows.get(i).getMenuIdTwo().equals(sysMenus.get(j).getMenuId())){
                            menus.add(sysMenus.get(j));
                            break;
                        }
                    }
                }
            }
        }
        return getChildPerms(menus, 0);
    }

这样改完之后我们就大功告成了,看下效果
原来这个角色只有这些菜单在这里插入图片描述
然后我们给张三这个角色追加菜单在这里插入图片描述

现在我们全给它加上了在这里插入图片描述
现在在不影响其他该角色用户的前提下我们给张三这个特定角色追加了菜单权限

Logo

快速构建 Web 应用程序

更多推荐