zoukankan      html  css  js  c++  java
  • 根据登陆用户获取相应权限菜单

    通过登录人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; }
  • 相关阅读:
    题解 P1587 【[NOI2016]循环之美】
    PKUSC2019颓废记
    使用ImageIO.write上传二维码文件时候,提示系统找不到指定路径
    rt.jar包添加源文件只需要关联到已安装对应jdk目录下source.zip源码文件即可
    Kali Linux安装中文输入法
    性能测试(一)——理发店模型
    瑜伽,不仅仅是瑜伽,敬艾扬格大师
    为什么想做测试,我的测试开端
    责任链模式-Chain of responsibility
    后缀数组-基础
  • 原文地址:https://www.cnblogs.com/pan-my/p/11428687.html
Copyright © 2011-2022 走看看