中国民政网站医院标准化建设,创建网站大约多少钱,百度小程序优化合作公司,台州优秀关键词优化目录
6.4 权限管理#xff08;菜单管理#xff09;
6.4.1 查询所有#xff08;含孩子#xff09;
6.4.2 添加权限
6.4.3 核心3#xff1a;查询登录用户的权限#xff0c;并绘制菜单
6.4 权限管理#xff08;菜单管理#xff09;
6.4.1 查询所有#xff08;含孩子…目录
6.4 权限管理菜单管理
6.4.1 查询所有含孩子
6.4.2 添加权限
6.4.3 核心3查询登录用户的权限并绘制菜单
6.4 权限管理菜单管理
6.4.1 查询所有含孩子
6.4.2 添加权限
6.4.3 核心3查询登录用户的权限并绘制菜单
1后端SQL版 获得登录用户 通过登录用户获得角色们 通过角色们查询所有的权限 分析
# 1. 查询用户的角色
SELECT role_id FROM sys_user_role WHERE user_id u001
# 结果角色id[1,2]
# 2. 查询指定角色们的权限id DISTINCT 去重
SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (1,2)
# 结果权限id[1,2,3,4,5]
# 3. 查询指定权限id的权限详情
SELECT * FROM sys_permission WHERE id IN (1,2,3,4,5)
# 使用子查询将3条语句整合
SELECT * FROM sys_permission WHERE id IN (SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (SELECT role_id FROM sys_user_role WHERE user_id u001)) 编写mapper Select(SELECT * FROM sys_permission WHERE id IN (SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (SELECT role_id FROM sys_user_role WHERE user_id #{uid})))ListSysPermission findAllByUserId(Param(uid) String uid); 编写service 接口 ListSysPermission findAllByLoginUser(TbUser loginUser); 实现 Overridepublic ListSysPermission findAllByLoginUser(TbUser loginUser) {
//1 查询指定用户的所有权限ListSysPermission permList baseMapper.findAllByUserId(loginUser.getUid());
//2 处理权限--父子关系ListSysPermission resultList new ArrayList();MapInteger, SysPermission cache new HashMap();for (SysPermission sysPermission : permList) {SysPermission permParent cache.get(sysPermission.getParentId());if(permParent null) {// 一级添加结果resultList.add(sysPermission);} else {permParent.getChildren().add(sysPermission);}// 将自己存放让孩子可以获得cache.put(sysPermission.getId(), sysPermission);}
return resultList;} 编写controller Resourceprivate HttpServletRequest request;Resourceprivate JwtProperties jwtProperties;
GetMapping(/login)public BaseResult findAllByLoginUser() {try {// 1 获得登录用户String token request.getHeader(Authorization);TbUser loginUser JwtUtils.getObjectFromToken(token, jwtProperties.getPublicKey(), TbUser.class);
// 2 获得所有的权限ListSysPermission list sysPermissionService.findAllByLoginUser(loginUser);
// 3 返回return BaseResult.ok(查询成功, list);} catch (Exception e) {e.printStackTrace();return BaseResult.error(获得菜单失败);}}
2后端对象版 service层使用通过mapper进行一系列的查询不用写SQL语句 //1. 查询用户的角色
//2. 查询指定角色们的权限id DISTINCT 去重
//3. 查询指定权限id的权限详情 Overridepublic ListSysPermission findAllByLoginUser(TbUser loginUser) {
// 1. 查询用户的角色 [1,2]QueryWrapperSysUserRole sysUserRoleQueryWrapper new QueryWrapper();sysUserRoleQueryWrapper.eq(user_id, loginUser.getUid());ListSysUserRole sysUserRoleList sysUserRoleMapper.selectList(sysUserRoleQueryWrapper);ListInteger roleIdList sysUserRoleList.stream().map(sysUserRole - sysUserRole.getRoleId()).collect(Collectors.toList());
// 2. 查询指定角色们的权限id DISTINCT 去重 [1,2,3,4,5]QueryWrapperSysRolePermission sysRolePermissionQueryWrapper new QueryWrapper();sysRolePermissionQueryWrapper.in(role_id, roleIdList);ListSysRolePermission sysRolePermissionList sysRolePermissionMapper.selectList(sysRolePermissionQueryWrapper);ListInteger permIdList sysRolePermissionList.stream().map(sysRolePermission - sysRolePermission.getPermId()).collect(Collectors.toList());
// 3. 查询指定权限id的权限详情QueryWrapperSysPermission sysPermissionQueryWrapper new QueryWrapper();sysPermissionQueryWrapper.in(id, permIdList );ListSysPermission permList baseMapper.selectList(sysPermissionQueryWrapper);
// 4 处理权限--父子关系ListSysPermission resultList new ArrayList();MapInteger, SysPermission cache new HashMap();for (SysPermission sysPermission : permList) {SysPermission permParent cache.get(sysPermission.getParentId());if(permParent null) {// 一级添加结果resultList.add(sysPermission);} else {permParent.getChildren().add(sysPermission);}// 将自己存放让孩子可以获得cache.put(sysPermission.getId(), sysPermission);}
return resultList;} 3前端 templateel-containerel-headerel-rowel-col :span22 classtitle学生管理系统(SMS)/el-colel-col :span2
!-- el-popoverplacementtop-startwidth200triggerhovercontent这是一段内容,这是一段内容,这是一段内容,这是一段内容。el-avatar slotreference sizelarge src/5.jpg/el-avatardiv classavatarItem用户详情/divdiv classavatarItem修改密码/divdiv classavatarItem退出登录/div/el-popover --el-dropdownspan classel-dropdown-linkel-avatar :size50 src/5.jpg/el-avatar/spanel-dropdown-menu slotdropdownel-dropdown-item用户详情/el-dropdown-itemel-dropdown-item修改密码/el-dropdown-itemel-dropdown-item退出登录/el-dropdown-item/el-dropdown-menu/el-dropdown/el-col/el-row/el-headerel-containerel-aside width200px!-- 菜单start --el-menu:default-active$route.pathrouterbackground-color#545c64text-color#fffactive-text-color#ffd04bel-menu-item index/i classel-icon-menu/ispan slottitle首页/span/el-menu-item
el-submenu v-for(onePerm,oi) in permList :keyoi :indexonePerm.pathtemplate slottitlespan{{onePerm.permName}}/span/templateel-menu-item v-for(twoPerm, ti) in onePerm.children :keyti :indextwoPerm.path{{twoPerm.permName}}/el-menu-item/el-submenu
!--el-submenu index/classestemplate slottitlei classel-icon-location/ispan班级管理/span/templateel-menu-item index/classes/classesAdd添加班级/el-menu-itemel-menu-item index/classes/classesList班级列表/el-menu-item/el-submenuel-submenu index/studenttemplate slottitlespan学生管理/span/templateel-menu-item index/student/studentList学生列表/el-menu-item/el-submenuel-submenu index/permtemplate slottitlespan权限管理/span/templateel-menu-item index/user/userList用户列表/el-menu-itemel-menu-item index/perm/roleList角色列表/el-menu-itemel-menu-item index/perm/permList权限列表/el-menu-item/el-submenu--/el-menu!-- 菜单end --/el-asideel-main!-- 视图显示 --nuxt//el-main/el-containerel-footer传智专修学院/el-footer/el-container
/template
script
export default {data() {return {permList: []}},methods: {async findAllPerm() {let { data:baseResult } await this.$axios.get(/user-service/perm/login)this.permList baseResult.data}},mounted() {this.findAllPerm()},
}
/script
stylehtml, body, #__nuxt, #__layout, .el-container {height: 100%;}body {margin: 0;}.avatarItem {width: 100px;display: inline-block;margin: 5px 0;}.title {font-size: 30px;font-weight: bold;}.el-header, .el-footer {background-color: #B3C0D1;color: #333;text-align: center;line-height: 60px;}.el-aside {background-color: #545c64;color: #fff;}.el-main {background-color: #E9EEF3;color: #333;}
/style