根据登陆用户获取相应权限菜单

╄→гoц情女王★ 提交于 2019-11-28 21:56:54
通过登录人userId获取对应角色 再获取对应角色下的权限菜单(用户角色关联表,角色菜单关联表)

1,构建递归获取父节点方法
 private void getUserMenus(HashMap<String, SysMenu> parentAndChildren, SysMenu sysMenu) {
        if (!parentAndChildren.containsKey(sysMenu.getRowId())) {
            parentAndChildren.put(sysMenu.getRowId(), sysMenu);
        }
        if (!parentAndChildren.containsKey(sysMenu.getParentId())) {
            SysMenu p = sysMenuMapper.find(sysMenu.getParentId());
            if (p != null) {
                getUserMenus(parentAndChildren, p);
            }
        }
    }

2,递归获取子节点
private void getTreeStructure(SysMenuDto root, List<SysMenu> orgs) {
        for (SysMenu org : orgs) {
            if (org.getParentId().equals(root.getId())) {
                SysMenuDto s = SysMenuDto.convertSysMenuEntity(org);
                getTreeStructure(s, orgs);
                if (root.getChildrens() == null) {
                    root.setChildrens(new ArrayList<>());
                }
                root.getChildrens().add(s);
            }
        }
    }

3,构建树形数据结构
 public List<SysMenuDto> getSysMenuTreeDataByAdmin(String userId,String did) {
        List<SysMenuDto> list = new ArrayList<>();
        //查询所有的菜单列表
        List<SysMenu> sysMenuList = sysRoleMapper.findListVisible();
        //查询所有的菜单编码列表
        List<String> sysMenuIdList = sysRoleMapper.findListId();
        //获取收藏的菜单
        List<SysUserFavoriteMenu> sysUserFavoriteMenuList = sysUserFavoriteMenuMapper.getSysUserFavoriteMenu(userId, did);
        //遍历判断是否是收藏的
        for(SysMenu sysMenu : sysMenuList){
            SysUserFavoriteMenu sysUserFavoriteMenu = sysUserFavoriteMenuMapper.getFavoriteMenu(userId,did,sysMenu.getRowId());
            if(sysUserFavoriteMenu != null){
                //是否收藏标志设置为收藏
                sysMenu.setIsFavorite("1");
            }else{
                sysMenu.setIsFavorite("0");
            }
        }
        for(SysUserFavoriteMenu sysUserFavoriteMenu : sysUserFavoriteMenuList){
            //判断收藏的菜单在所有的菜单中是否存在 不存在就把这个用户收藏的菜单移除
            if(!sysMenuIdList.contains(sysUserFavoriteMenu.getMenuId())){
                sysUserFavoriteMenuMapper.deleteFavoriteMenu(sysUserFavoriteMenu.getMenuId());
            }
        }
        //获取该经销商默认设置的系统菜单版本
        String verdion=null;
        //获取顶级菜单
        List<SysMenu> topMenuList = sysRoleMapper.selectTopMenu(verdion);
        if (null == topMenuList) {
            return null;
        }
        for (SysMenu menu : topMenuList) {
            SysMenuDto s = SysMenuDto.convertSysMenuEntity(menu);
            getTreeStructure(s, sysMenuList);
            list.add(s);
        }        //排序
        list.sort((SysMenuDto s1,SysMenuDto s2) -> s1.getSort() >= s2.getSort() ?  1 : -1);
        logger.info("获取最终菜单:{}", JsonUtil.obj2String(list));
        return list;
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!