通过登录人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;
}
转载于:https://www.cnblogs.com/pan-my/p/11428687.html