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

  • 思路
  • 前端vue代码
  • 后端vue代码



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

思路

先建一个表,这个表是存放这个角色追加的菜单id

若依框架 不使用 redis 若依框架权限_javascript


然后我们在该角色管理界面给他分配相应的权限把这个表给填充起来

若依框架 不使用 redis 若依框架权限_java_02


这时候我们就给他分配完追加的权限,接下来是怎么把分配的权限给他应用上,翻代码吧

前端vue代码

像这个菜单肯定是在整体布局的左边,所以我们去找sidebar这个文件夹

若依框架 不使用 redis 若依框架权限_前端_03


接下来我们这要找到这个sidebarRouters数据就行了,找了半天发现这是一个getter全局属性,在store数据库里

若依框架 不使用 redis 若依框架权限_若依框架 不使用 redis_04


根据这个getter我们可以知道她是在permission里取得数据,接下来去这个文件里找就行了

若依框架 不使用 redis 若依框架权限_vue.js_05


若依框架 不使用 redis 若依框架权限_javascript_06


若依框架 不使用 redis 若依框架权限_java_07


若依框架 不使用 redis 若依框架权限_vue.js_08


从这里我们就可以看出菜单的数据是在这里得到的,我们只要去后台找到这个数据集合并讲我们追加的数据给他追加上就行了

后端vue代码

若依框架 不使用 redis 若依框架权限_前端_09


从这我们已经能看到菜单的集合是在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);
    }

这样改完之后我们就大功告成了,看下效果

原来这个角色只有这些菜单

若依框架 不使用 redis 若依框架权限_前端_10


然后我们给张三这个角色追加菜单

若依框架 不使用 redis 若依框架权限_javascript_11

现在我们全给它加上了

若依框架 不使用 redis 若依框架权限_javascript_12


现在在不影响其他该角色用户的前提下我们给张三这个特定角色追加了菜单权限