1、在路由前进行权限判断
// 路由前的操作
router.beforeEach((to, from, next) => {
//顶部进度条开始显示加载
NProgress.start()
// 如果cookie中有token
if (getToken()) {
if (to.path === '/login') {
// 如果是/login, 路由到/
next({ path: '/' })
NProgress.done()
} else {
if (store.getters.roles.length === 0) {
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(res => {
// 拉取user_info
const roles = res.roles
store.dispatch('GenerateRoutes', { roles }).then(accessRoutes => {
// 测试 默认静态页面
// store.dispatch('permission/generateRoutes', { roles }).then(accessRoutes => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes) // 动态添加可访问路由表
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
})
})
.catch(err => {
store.dispatch('FedLogOut').then(() => {
Message.error(err)
next({ path: '/' })
})
})
} else {
next()
// 没有动态改变权限的需求可直接next() 删除下方权限判断 ↓
// if (hasPermission(store.getters.roles, to.meta.roles)) {
// next()
// } else {
// next({ path: '/401', replace: true, query: { noGoBack: true }})
// }
// 可删 ↑
}
}
}else {
//如果没有token
if(whiteList.indexOf(to.path) !== -1){
//如果目标路径在白名单中,则直接进入
next()
}else {
next(`/login?redirect=${to.path}`) //重定向到登录页
// 进度条结束
NProgress.done()
}
}
})
2、调用GetInfo方法获取用户信息
/**
* 获取用户信息
*
* @return 用户信息
*/
@GetMapping("getInfo")
public AjaxResult getInfo()
{
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
SysUser user = loginUser.getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
return ajax;
}
I.超级管理员
SysUser user = loginUser.getUser();
{
"admin": true,
"avatar": "",
"createBy": "admin",
"createTime": 1521171180000,
"delFlag": "0",
"dept": {
"children": [],
"deptId": 103,
"deptName": "研发部门",
"leader": "若依",
"orderNum": "1",
"params": {},
"parentId": 101,
"status": "0"
},
"deptId": 103,
"email": "ry@163.com",
"loginDate": 1521171180000,
"loginIp": "127.0.0.1",
"nickName": "若依",
"params": {},
"password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
"phonenumber": "15888888888",
"remark": "管理员",
"roles": [
{
"admin": true,
"dataScope": "1",
"flag": false,
"params": {},
"roleId": 1,
"roleKey": "admin",
"roleName": "超级管理员",
"roleSort": "1",
"status": "0"
}
],
"sex": "1",
"status": "0",
"userId": 1,
"userName": "admin"
}
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
["admin"]
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
["*:*:*"]
II.ry员工
SysUser user = loginUser.getUser();
{
"admin": false,
"avatar": "",
"createBy": "admin",
"createTime": 1521171180000,
"delFlag": "0",
"dept": {
"children": [],
"deptId": 105,
"deptName": "测试部门",
"leader": "若依",
"orderNum": "3",
"params": {},
"parentId": 101,
"status": "0"
},
"deptId": 105,
"email": "ry@qq.com",
"loginDate": 1521171180000,
"loginIp": "127.0.0.1",
"nickName": "若依",
"params": {},
"password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
"phonenumber": "15666666666",
"remark": "测试员",
"roles": [
{
"admin": false,
"dataScope": "2",
"flag": false,
"params": {},
"roleId": 2,
"roleKey": "common",
"roleName": "普通角色",
"roleSort": "2",
"status": "0"
}
],
"sex": "1",
"status": "0",
"userId": 2,
"userName": "ry"
}
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
/**
* 获取角色数据权限
*
* @param user 用户信息
* @return 角色权限信息
*/
public Set<String> getRolePermission(SysUser user)
{
Set<String> roles = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
roles.add("admin");
}
else
{
roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
}
return roles;
}
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
@Override
public Set<String> selectRolePermissionByUserId(Long userId)
{
List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (SysRole perm : perms)
{
if (StringUtils.isNotNull(perm))
{
permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
}
}
return permsSet;
}
List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
left join sys_user u on u.user_id = ur.user_id
left join sys_dept d on u.dept_id = d.dept_id
WHERE r.del_flag = '0' and ur.user_id = #{userId}

关联关系:

[
{
"admin": false,
"createTime": 1521171180000,
"dataScope": "2",
"delFlag": "0",
"flag": false,
"params": {},
"remark": "普通角色",
"roleId": 2,
"roleKey": "common",
"roleName": "普通角色",
"roleSort": "2",
"status": "0"
}
]
permsSet
["common"]
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
/**
* 获取菜单数据权限
*
* @param user 用户信息
* @return 菜单权限信息
*/
public Set<String> getMenuPermission(SysUser user)
{
Set<String> roles = new HashSet<String>();
// 管理员拥有所有权限
if (user.isAdmin())
{
roles.add("*:*:*");
}
else
{
roles.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
}
return roles;
}
/**
* 根据用户ID查询权限
*
* @param userId 用户ID
* @return 权限列表
*/
@Override
public Set<String> selectMenuPermsByUserId(Long userId)
{
List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (String perm : perms)
{
if (StringUtils.isNotEmpty(perm))
{
permsSet.addAll(Arrays.asList(perm.trim().split(",")));
}
}
return permsSet;
}
List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
select distinct m.perms
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
left join sys_user_role ur on rm.role_id = ur.role_id
where ur.user_id = #{userId}

关联关系:

[
"",
"system:user:list",
"system:role:list",
"system:menu:list",
"system:dept:list",
"system:post:list",
"system:dict:list",
"system:config:list",
"system:notice:list",
"monitor:online:list",
"monitor:job:list",
"monitor:druid:list",
"monitor:server:list",
"tool:build:list",
"tool:gen:list",
"tool:swagger:list",
"monitor:operlog:list",
"monitor:logininfor:list",
"system:user:query",
"system:user:add",
"system:user:edit",
"system:user:remove",
"system:user:export",
"system:user:import",
"system:user:resetPwd",
"system:role:query",
"system:role:add",
"system:role:edit",
"system:role:remove",
"system:role:export",
"system:menu:query",
"system:menu:add",
"system:menu:edit",
"system:menu:remove",
"system:dept:query",
"system:dept:add",
"system:dept:edit",
"system:dept:remove",
"system:post:query",
"system:post:add",
"system:post:edit",
"system:post:remove",
"system:post:export",
"system:dict:query",
"system:dict:add",
"system:dict:edit",
"system:dict:remove",
"system:dict:export",
"system:config:query",
"system:config:add",
"system:config:edit",
"system:config:remove",
"system:config:export",
"system:notice:query",
"system:notice:add",
"system:notice:edit",
"system:notice:remove",
"monitor:operlog:query",
"monitor:operlog:remove",
"monitor:operlog:export",
"monitor:logininfor:query",
"monitor:logininfor:remove",
"monitor:logininfor:export",
"monitor:online:query",
"monitor:online:batchLogout",
"monitor:online:forceLogout",
"monitor:job:query",
"monitor:job:add",
"monitor:job:edit",
"monitor:job:remove",
"monitor:job:changeStatus",
"monitor:job:export",
"tool:gen:query",
"tool:gen:edit",
"tool:gen:remove",
"tool:gen:import",
"tool:gen:preview",
"tool:gen:code"
]
permsSet
[
"system:user:resetPwd",
"system:post:list",
"monitor:operlog:export",
"monitor:druid:list",
"system:menu:query",
"system:dept:remove",
"system:menu:list",
"tool:gen:edit",
"system:dict:edit",
"monitor:logininfor:remove",
"monitor:job:list",
"system:user:query",
"system:user:add",
"system:notice:remove",
"system:user:export",
"system:role:remove",
"monitor:job:edit",
"tool:gen:query",
"system:dept:query",
"system:dict:list",
"monitor:job:query",
"monitor:online:forceLogout",
"system:notice:list",
"system:dict:query",
"monitor:online:query",
"system:notice:query",
"system:notice:edit",
"monitor:online:list",
"tool:gen:import",
"system:post:edit",
"monitor:job:add",
"monitor:logininfor:list",
"tool:gen:list",
"system:dict:export",
"system:post:query",
"system:post:remove",
"system:config:edit",
"system:user:remove",
"system:config:list",
"system:menu:add",
"system:role:list",
"system:user:import",
"system:dict:remove",
"system:user:edit",
"system:post:export",
"system:config:export",
"system:role:edit",
"monitor:online:batchLogout",
"system:dept:list",
"system:config:query",
"monitor:operlog:remove",
"monitor:operlog:list",
"system:role:add",
"system:menu:remove",
"system:dict:add",
"monitor:logininfor:query",
"monitor:server:list",
"tool:build:list",
"monitor:logininfor:export",
"tool:swagger:list",
"system:dept:edit",
"system:post:add",
"monitor:job:changeStatus",
"tool:gen:preview",
"monitor:operlog:query",
"system:user:list",
"system:notice:add",
"monitor:job:remove",
"system:role:export",
"system:config:add",
"tool:gen:code",
"monitor:job:export",
"tool:gen:remove",
"system:role:query",
"system:menu:edit",
"system:dept:add",
"system:config:remove"
]
store.dispatch('GetInfo') 出参:
{
"msg": "操作成功",
"code": 200,
"permissions": [
"system:user:resetPwd",
"system:post:list",
"monitor:operlog:export",
"monitor:druid:list",
"system:menu:query",
"system:dept:remove",
"system:menu:list",
"tool:gen:edit",
"system:dict:edit",
"monitor:logininfor:remove",
"monitor:job:list",
"system:user:query",
"system:user:add",
"system:notice:remove",
"system:user:export",
"system:role:remove",
"monitor:job:edit",
"tool:gen:query",
"system:dept:query",
"system:dict:list",
"monitor:job:query",
"monitor:online:forceLogout",
"system:notice:list",
"system:dict:query",
"monitor:online:query",
"system:notice:query",
"system:notice:edit",
"monitor:online:list",
"tool:gen:import",
"system:post:edit",
"monitor:job:add",
"monitor:logininfor:list",
"tool:gen:list",
"system:dict:export",
"system:post:query",
"system:post:remove",
"system:config:edit",
"system:user:remove",
"system:config:list",
"system:menu:add",
"system:role:list",
"system:user:import",
"system:dict:remove",
"system:user:edit",
"system:post:export",
"system:config:export",
"system:role:edit",
"monitor:online:batchLogout",
"system:dept:list",
"system:config:query",
"monitor:operlog:remove",
"monitor:operlog:list",
"system:role:add",
"system:menu:remove",
"system:dict:add",
"monitor:logininfor:query",
"monitor:server:list",
"tool:build:list",
"monitor:logininfor:export",
"tool:swagger:list",
"system:dept:edit",
"system:post:add",
"monitor:job:changeStatus",
"tool:gen:preview",
"monitor:operlog:query",
"system:user:list",
"system:notice:add",
"monitor:job:remove",
"system:role:export",
"system:config:add",
"tool:gen:code",
"monitor:job:export",
"tool:gen:remove",
"system:role:query",
"system:menu:edit",
"system:dept:add",
"system:config:remove"
],
"roles": [
"common"
],
"user": {
"admin": false,
"avatar": "",
"createBy": "admin",
"createTime": 1521171180000,
"delFlag": "0",
"dept": {
"children": [],
"deptId": 105,
"deptName": "测试部门",
"leader": "若依",
"orderNum": "3",
"params": {},
"parentId": 101,
"status": "0"
},
"deptId": 105,
"email": "ry@qq.com",
"loginDate": 1521171180000,
"loginIp": "127.0.0.1",
"nickName": "若依",
"params": {},
"password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2",
"phonenumber": "15666666666",
"remark": "测试员",
"roles": [
{
"admin": false,
"dataScope": "2",
"flag": false,
"params": {},
"roleId": 2,
"roleKey": "common",
"roleName": "普通角色",
"roleSort": "2",
"status": "0"
}
],
"sex": "1",
"status": "0",
"userId": 2,
"userName": "ry"
}
}
3、调用GenerateRoutes方法获取用户信息
/**
* 获取路由信息
*
* @return 路由信息
*/
@GetMapping("getRouters")
public AjaxResult getRouters()
{
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
// 用户信息
SysUser user = loginUser.getUser();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
return AjaxResult.success(menuService.buildMenus(menus));
}
I.超级管理员
List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
递归添加菜单路由树
[
{
"children": [
{
"children": [],
"component": "system/user/index",
"createTime": 1521171180000,
"icon": "user",
"isFrame": "1",
"menuId": 100,
"menuName": "用户管理",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 1,
"path": "user",
"perms": "system:user:list",
"visible": "0"
},
{
"children": [],
"component": "system/role/index",
"createTime": 1521171180000,
"icon": "peoples",
"isFrame": "1",
"menuId": 101,
"menuName": "角色管理",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 1,
"path": "role",
"perms": "system:role:list",
"visible": "0"
},
{
"children": [],
"component": "system/menu/index",
"createTime": 1521171180000,
"icon": "tree-table",
"isFrame": "1",
"menuId": 102,
"menuName": "菜单管理",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 1,
"path": "menu",
"perms": "system:menu:list",
"visible": "0"
},
{
"children": [],
"component": "system/dept/index",
"createTime": 1521171180000,
"icon": "tree",
"isFrame": "1",
"menuId": 103,
"menuName": "部门管理",
"menuType": "C",
"orderNum": "4",
"params": {},
"parentId": 1,
"path": "dept",
"perms": "system:dept:list",
"visible": "0"
},
{
"children": [],
"component": "system/post/index",
"createTime": 1521171180000,
"icon": "post",
"isFrame": "1",
"menuId": 104,
"menuName": "岗位管理",
"menuType": "C",
"orderNum": "5",
"params": {},
"parentId": 1,
"path": "post",
"perms": "system:post:list",
"visible": "0"
},
{
"children": [],
"component": "system/dict/index",
"createTime": 1521171180000,
"icon": "dict",
"isFrame": "1",
"menuId": 105,
"menuName": "字典管理",
"menuType": "C",
"orderNum": "6",
"params": {},
"parentId": 1,
"path": "dict",
"perms": "system:dict:list",
"visible": "0"
},
{
"children": [],
"component": "system/config/index",
"createTime": 1521171180000,
"icon": "edit",
"isFrame": "1",
"menuId": 106,
"menuName": "参数设置",
"menuType": "C",
"orderNum": "7",
"params": {},
"parentId": 1,
"path": "config",
"perms": "system:config:list",
"visible": "0"
},
{
"children": [],
"component": "system/notice/index",
"createTime": 1521171180000,
"icon": "message",
"isFrame": "1",
"menuId": 107,
"menuName": "通知公告",
"menuType": "C",
"orderNum": "8",
"params": {},
"parentId": 1,
"path": "notice",
"perms": "system:notice:list",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "monitor/operlog/index",
"createTime": 1521171180000,
"icon": "form",
"isFrame": "1",
"menuId": 500,
"menuName": "操作日志",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 108,
"path": "operlog",
"perms": "monitor:operlog:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/logininfor/index",
"createTime": 1521171180000,
"icon": "logininfor",
"isFrame": "1",
"menuId": 501,
"menuName": "登录日志",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 108,
"path": "logininfor",
"perms": "monitor:logininfor:list",
"visible": "0"
}
],
"component": "system/log/index",
"createTime": 1521171180000,
"icon": "log",
"isFrame": "1",
"menuId": 108,
"menuName": "日志管理",
"menuType": "M",
"orderNum": "9",
"params": {},
"parentId": 1,
"path": "log",
"perms": "",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "system",
"isFrame": "1",
"menuId": 1,
"menuName": "系统管理",
"menuType": "M",
"orderNum": "1",
"params": {},
"parentId": 0,
"path": "system",
"perms": "",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "monitor/online/index",
"createTime": 1521171180000,
"icon": "online",
"isFrame": "1",
"menuId": 109,
"menuName": "在线用户",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 2,
"path": "online",
"perms": "monitor:online:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/job/index",
"createTime": 1521171180000,
"icon": "job",
"isFrame": "1",
"menuId": 110,
"menuName": "定时任务",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 2,
"path": "job",
"perms": "monitor:job:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/druid/index",
"createTime": 1521171180000,
"icon": "druid",
"isFrame": "1",
"menuId": 111,
"menuName": "数据监控",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 2,
"path": "druid",
"perms": "monitor:druid:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/server/index",
"createTime": 1521171180000,
"icon": "server",
"isFrame": "1",
"menuId": 112,
"menuName": "服务监控",
"menuType": "C",
"orderNum": "4",
"params": {},
"parentId": 2,
"path": "server",
"perms": "monitor:server:list",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "monitor",
"isFrame": "1",
"menuId": 2,
"menuName": "系统监控",
"menuType": "M",
"orderNum": "2",
"params": {},
"parentId": 0,
"path": "monitor",
"perms": "",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "tool/build/index",
"createTime": 1521171180000,
"icon": "build",
"isFrame": "1",
"menuId": 113,
"menuName": "表单构建",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 3,
"path": "build",
"perms": "tool:build:list",
"visible": "0"
},
{
"children": [],
"component": "tool/gen/index",
"createTime": 1521171180000,
"icon": "code",
"isFrame": "1",
"menuId": 114,
"menuName": "代码生成",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 3,
"path": "gen",
"perms": "tool:gen:list",
"visible": "0"
},
{
"children": [],
"component": "tool/swagger/index",
"createTime": 1521171180000,
"icon": "swagger",
"isFrame": "1",
"menuId": 115,
"menuName": "系统接口",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 3,
"path": "swagger",
"perms": "tool:swagger:list",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "tool",
"isFrame": "1",
"menuId": 3,
"menuName": "系统工具",
"menuType": "M",
"orderNum": "3",
"params": {},
"parentId": 0,
"path": "tool",
"perms": "",
"visible": "0"
},
{
"children": [],
"createTime": 1521171180000,
"icon": "guide",
"isFrame": "0",
"menuId": 4,
"menuName": "若依官网",
"menuType": "M",
"orderNum": "4",
"params": {},
"parentId": 0,
"path": "http://ruoyi.vip",
"perms": "",
"visible": "0"
}
]
/**
* 根据用户名称查询菜单
*
* @param username 用户名称
* @return 菜单列表
*/
@Override
public List<SysMenu> selectMenuTreeByUserId(Long userId)
{
List<SysMenu> menus = null;
if (SecurityUtils.isAdmin(userId))
{
menus = menuMapper.selectMenuTreeAll();
}
else
{
menus = menuMapper.selectMenuTreeByUserId(userId);
}
return getChildPerms(menus, 0);
}
List<SysMenu> menus = menuMapper.selectMenuTreeAll();
select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time
from sys_menu m where m.menu_type in ('M', 'C') and m.visible = 0
order by m.parent_id, m.order_num

II.ry员工
List<SysMenu> menus = menuMapper.selectMenuTreeByUserId(userId);
[
{
"children": [
{
"children": [],
"component": "system/user/index",
"createTime": 1521171180000,
"icon": "user",
"isFrame": "1",
"menuId": 100,
"menuName": "用户管理",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 1,
"path": "user",
"perms": "system:user:list",
"visible": "0"
},
{
"children": [],
"component": "system/role/index",
"createTime": 1521171180000,
"icon": "peoples",
"isFrame": "1",
"menuId": 101,
"menuName": "角色管理",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 1,
"path": "role",
"perms": "system:role:list",
"visible": "0"
},
{
"children": [],
"component": "system/menu/index",
"createTime": 1521171180000,
"icon": "tree-table",
"isFrame": "1",
"menuId": 102,
"menuName": "菜单管理",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 1,
"path": "menu",
"perms": "system:menu:list",
"visible": "0"
},
{
"children": [],
"component": "system/dept/index",
"createTime": 1521171180000,
"icon": "tree",
"isFrame": "1",
"menuId": 103,
"menuName": "部门管理",
"menuType": "C",
"orderNum": "4",
"params": {},
"parentId": 1,
"path": "dept",
"perms": "system:dept:list",
"visible": "0"
},
{
"children": [],
"component": "system/post/index",
"createTime": 1521171180000,
"icon": "post",
"isFrame": "1",
"menuId": 104,
"menuName": "岗位管理",
"menuType": "C",
"orderNum": "5",
"params": {},
"parentId": 1,
"path": "post",
"perms": "system:post:list",
"visible": "0"
},
{
"children": [],
"component": "system/dict/index",
"createTime": 1521171180000,
"icon": "dict",
"isFrame": "1",
"menuId": 105,
"menuName": "字典管理",
"menuType": "C",
"orderNum": "6",
"params": {},
"parentId": 1,
"path": "dict",
"perms": "system:dict:list",
"visible": "0"
},
{
"children": [],
"component": "system/config/index",
"createTime": 1521171180000,
"icon": "edit",
"isFrame": "1",
"menuId": 106,
"menuName": "参数设置",
"menuType": "C",
"orderNum": "7",
"params": {},
"parentId": 1,
"path": "config",
"perms": "system:config:list",
"visible": "0"
},
{
"children": [],
"component": "system/notice/index",
"createTime": 1521171180000,
"icon": "message",
"isFrame": "1",
"menuId": 107,
"menuName": "通知公告",
"menuType": "C",
"orderNum": "8",
"params": {},
"parentId": 1,
"path": "notice",
"perms": "system:notice:list",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "monitor/operlog/index",
"createTime": 1521171180000,
"icon": "form",
"isFrame": "1",
"menuId": 500,
"menuName": "操作日志",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 108,
"path": "operlog",
"perms": "monitor:operlog:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/logininfor/index",
"createTime": 1521171180000,
"icon": "logininfor",
"isFrame": "1",
"menuId": 501,
"menuName": "登录日志",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 108,
"path": "logininfor",
"perms": "monitor:logininfor:list",
"visible": "0"
}
],
"component": "system/log/index",
"createTime": 1521171180000,
"icon": "log",
"isFrame": "1",
"menuId": 108,
"menuName": "日志管理",
"menuType": "M",
"orderNum": "9",
"params": {},
"parentId": 1,
"path": "log",
"perms": "",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "system",
"isFrame": "1",
"menuId": 1,
"menuName": "系统管理",
"menuType": "M",
"orderNum": "1",
"params": {},
"parentId": 0,
"path": "system",
"perms": "",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "monitor/online/index",
"createTime": 1521171180000,
"icon": "online",
"isFrame": "1",
"menuId": 109,
"menuName": "在线用户",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 2,
"path": "online",
"perms": "monitor:online:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/job/index",
"createTime": 1521171180000,
"icon": "job",
"isFrame": "1",
"menuId": 110,
"menuName": "定时任务",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 2,
"path": "job",
"perms": "monitor:job:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/druid/index",
"createTime": 1521171180000,
"icon": "druid",
"isFrame": "1",
"menuId": 111,
"menuName": "数据监控",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 2,
"path": "druid",
"perms": "monitor:druid:list",
"visible": "0"
},
{
"children": [],
"component": "monitor/server/index",
"createTime": 1521171180000,
"icon": "server",
"isFrame": "1",
"menuId": 112,
"menuName": "服务监控",
"menuType": "C",
"orderNum": "4",
"params": {},
"parentId": 2,
"path": "server",
"perms": "monitor:server:list",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "monitor",
"isFrame": "1",
"menuId": 2,
"menuName": "系统监控",
"menuType": "M",
"orderNum": "2",
"params": {},
"parentId": 0,
"path": "monitor",
"perms": "",
"visible": "0"
},
{
"children": [
{
"children": [],
"component": "tool/build/index",
"createTime": 1521171180000,
"icon": "build",
"isFrame": "1",
"menuId": 113,
"menuName": "表单构建",
"menuType": "C",
"orderNum": "1",
"params": {},
"parentId": 3,
"path": "build",
"perms": "tool:build:list",
"visible": "0"
},
{
"children": [],
"component": "tool/gen/index",
"createTime": 1521171180000,
"icon": "code",
"isFrame": "1",
"menuId": 114,
"menuName": "代码生成",
"menuType": "C",
"orderNum": "2",
"params": {},
"parentId": 3,
"path": "gen",
"perms": "tool:gen:list",
"visible": "0"
},
{
"children": [],
"component": "tool/swagger/index",
"createTime": 1521171180000,
"icon": "swagger",
"isFrame": "1",
"menuId": 115,
"menuName": "系统接口",
"menuType": "C",
"orderNum": "3",
"params": {},
"parentId": 3,
"path": "swagger",
"perms": "tool:swagger:list",
"visible": "0"
}
],
"createTime": 1521171180000,
"icon": "tool",
"isFrame": "1",
"menuId": 3,
"menuName": "系统工具",
"menuType": "M",
"orderNum": "3",
"params": {},
"parentId": 0,
"path": "tool",
"perms": "",
"visible": "0"
},
{
"children": [],
"createTime": 1521171180000,
"icon": "guide",
"isFrame": "0",
"menuId": 4,
"menuName": "若依官网",
"menuType": "M",
"orderNum": "4",
"params": {},
"parentId": 0,
"path": "http://ruoyi.vip",
"perms": "",
"visible": "0"
}
]
select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, ifnull(m.perms,'') as perms, m.is_frame, m.menu_type, m.icon, m.order_num, m.create_time
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
left join sys_user_role ur on rm.role_id = ur.role_id
left join sys_role ro on ur.role_id = ro.role_id
left join sys_user u on ur.user_id = u.user_id
where u.user_id = #{userId} and m.menu_type in ('M', 'C') and m.visible = 0 AND ro.status = 0
order by m.parent_id, m.order_num

关联关系

store.dispatch('GenerateRoutes', { roles })出参:
{
"msg": "操作成功",
"code": 200,
"data": [
{
"alwaysShow": true,
"children": [
{
"component": "system/user/index",
"meta": {
"icon": "user",
"title": "用户管理"
},
"name": "用户管理",
"path": "user"
},
{
"component": "system/role/index",
"meta": {
"icon": "peoples",
"title": "角色管理"
},
"name": "角色管理",
"path": "role"
},
{
"component": "system/menu/index",
"meta": {
"icon": "tree-table",
"title": "菜单管理"
},
"name": "菜单管理",
"path": "menu"
},
{
"component": "system/dept/index",
"meta": {
"icon": "tree",
"title": "部门管理"
},
"name": "部门管理",
"path": "dept"
},
{
"component": "system/post/index",
"meta": {
"icon": "post",
"title": "岗位管理"
},
"name": "岗位管理",
"path": "post"
},
{
"component": "system/dict/index",
"meta": {
"icon": "dict",
"title": "字典管理"
},
"name": "字典管理",
"path": "dict"
},
{
"component": "system/config/index",
"meta": {
"icon": "edit",
"title": "参数设置"
},
"name": "参数设置",
"path": "config"
},
{
"component": "system/notice/index",
"meta": {
"icon": "message",
"title": "通知公告"
},
"name": "通知公告",
"path": "notice"
},
{
"alwaysShow": true,
"children": [
{
"component": "monitor/operlog/index",
"meta": {
"icon": "form",
"title": "操作日志"
},
"name": "操作日志",
"path": "operlog"
},
{
"component": "monitor/logininfor/index",
"meta": {
"icon": "logininfor",
"title": "登录日志"
},
"name": "登录日志",
"path": "logininfor"
}
],
"component": "system/log/index",
"meta": {
"icon": "log",
"title": "日志管理"
},
"name": "日志管理",
"path": "log",
"redirect": "noRedirect"
}
],
"component": "Layout",
"meta": {
"icon": "system",
"title": "系统管理"
},
"name": "系统管理",
"path": "/system",
"redirect": "noRedirect"
},
{
"alwaysShow": true,
"children": [
{
"component": "monitor/online/index",
"meta": {
"icon": "online",
"title": "在线用户"
},
"name": "在线用户",
"path": "online"
},
{
"component": "monitor/job/index",
"meta": {
"icon": "job",
"title": "定时任务"
},
"name": "定时任务",
"path": "job"
},
{
"component": "monitor/druid/index",
"meta": {
"icon": "druid",
"title": "数据监控"
},
"name": "数据监控",
"path": "druid"
},
{
"component": "monitor/server/index",
"meta": {
"icon": "server",
"title": "服务监控"
},
"name": "服务监控",
"path": "server"
}
],
"component": "Layout",
"meta": {
"icon": "monitor",
"title": "系统监控"
},
"name": "系统监控",
"path": "/monitor",
"redirect": "noRedirect"
},
{
"alwaysShow": true,
"children": [
{
"component": "tool/build/index",
"meta": {
"icon": "build",
"title": "表单构建"
},
"name": "表单构建",
"path": "build"
},
{
"component": "tool/gen/index",
"meta": {
"icon": "code",
"title": "代码生成"
},
"name": "代码生成",
"path": "gen"
},
{
"component": "tool/swagger/index",
"meta": {
"icon": "swagger",
"title": "系统接口"
},
"name": "系统接口",
"path": "swagger"
}
],
"component": "Layout",
"meta": {
"icon": "tool",
"title": "系统工具"
},
"name": "系统工具",
"path": "/tool",
"redirect": "noRedirect"
},
{
"component": "Layout",
"meta": {
"icon": "guide",
"title": "若依官网"
},
"name": "若依官网",
"path": "http://ruoyi.vip"
}
]
}