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

通过登录人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; }

猜你喜欢

转载自www.cnblogs.com/pan-my/p/11428687.html