根據登陸用戶獲取相應權限菜單


通過登錄人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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM