【学生管理系统】权限管理之角色管理
目录
6.3 角色管理
6.3.1 查询所有角色
6.3.2 核心2:给角色授予权限(菜单)
6.3.3 添加角色
6.3 角色管理
6.3.1 查询所有角色
1)后端【已有】
2)前端
要求:左右分屏
<template><div><el-row><el-col :span="16"><el-card class="role-list-card"><div slot="header" class="clearfix"><span>角色列表</span></div><!-- 角色列表 start --><el-table:data="roleList"stripestyle="width: 100%"><el-table-columnprop="id"label="角色ID"fixedwidth="80"></el-table-column><el-table-columnprop="roleName"label="角色名称"fixedwidth="180"></el-table-column><el-table-columnprop="roleDesc"label="角色描述"width="200"></el-table-column><el-table-columnlabel="操作" fixed="right"><template slot-scope="scope"><el-button size="mini">编辑</el-button><el-button size="mini" type="danger">删除</el-button></template></el-table-column></el-table><!-- 角色列表 end --></el-card></el-col><el-col :span="8" style="padding-left: 10px;"><el-card class="perm-list-card"><div slot="header" class="clearfix"><span>权限展示</span><el-button type="primary" style="float: right; padding: 3px 0">授权</el-button></div><!-- 权限展示 start --><!-- 权限展示 end --></el-card></el-col></el-row></div> </template> <script> export default {data() {return {roleList: []}},methods: {async findAllRole() {// ajaxlet { data: baseResult } = await this.$axios.get('/user-service/role')// 处理if(baseResult.code == 20000) {this.roleList = baseResult.data} else {this.$message.error(baseResult.message)}}},mounted() {// 查询所有的角色this.findAllRole()}, } </script> <style>.role-list-card {height: 100%;}.perm-list-card {height: 100%;} </style>
6.3.2 核心2:给角色授予权限(菜单)
1)后端:查询所有的权限(含孩子)
方式1:在controller中排序查询所有,然后使用Map进行缓存处理,将所有权限拼凑成父子关系。
方式2:使用mapper注解版
编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)
编写service:查询所有
编写controller:查询所有
编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)
package com.czxy.classes.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.czxy.sys.SysPermission; import org.apache.ibatis.annotations.*; import java.util.List; /*** @author 桐叔* @email liangtong@itcast.cn* @description*/ @Mapper public interface SysPermissionMapper extends BaseMapper<SysPermission> {/*** 通过父id查询所有的权限* @author 桐叔* @email liangtong@itcast.cn* @return*/@Select("SELECT * FROM sys_permission WHERE parent_id = #{parentId}")@Results({@Result(property = "id", column = "id"),@Result(property = "permName", column = "permName"),@Result(property = "parentId", column = "parent_id"),@Result(property = "path", column = "path"),@Result(property = "children", many = @Many(select = "com.czxy.classes.mapper.SysPermissionMapper.findAllByParentId"), column = "id")})public List<SysPermission> findAllByParentId(@Param("parentId") Integer parentId) ; }
编写service:查询所有
接口
@Service @Transactional public interface SysPermissionService extends IService<SysPermission> { public List<SysPermission> findAllByParentId(Integer parentId) ; }
实现类
package com.czxy.classes.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.czxy.classes.mapper.SysPermissionMapper; import com.czxy.classes.service.SysPermissionService; import com.czxy.sys.SysPermission; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /*** @author 桐叔* @email liangtong@itcast.cn* @description*/ @Service @Transactional public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, SysPermission> implements SysPermissionService { @Overridepublic List<SysPermission> findAllByParentId(Integer parentId) {return baseMapper.findAllByParentId(parentId);} }
编写controller:查询所有
package com.czxy.classes.controller; import com.czxy.classes.service.SysPermissionService; import com.czxy.sys.SysPermission; import com.czxy.vo.BaseResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /*** @author 桐叔* @email liangtong@itcast.cn* @description*/ @RestController @RequestMapping("/perm") public class SysPermissionController {@Resourceprivate SysPermissionService sysPermissionService; /*** 查询所有,含孩子* @author 桐叔* @email liangtong@itcast.cn* @return*/@GetMapping("/parent/{parentId}")public BaseResult findAllByParentId(@PathVariable("parentId") Integer parentId) {// 查询List<SysPermission> list = sysPermissionService.findAllByParentId(parentId);return BaseResult.ok("查询成功", list);} }
2)后端:查询指定角色的所有的权限
提交数据:roleId = 1
获得数据:[ {roleId: 1, permId: 1}, {roleId: 1, permId: 2}, ...] --> [1,2,3,4]
package com.czxy.classes.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.czxy.classes.service.SysRolePermissionService; import com.czxy.sys.SysRolePermission; import com.czxy.vo.BaseResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /*** @author 桐叔* @email liangtong@itcast.cn* @description*/ @RestController @RequestMapping("/rolePerm") public class SysRolePermissionController {@Resourceprivate SysRolePermissionService sysRolePermissionService; @GetMapping("/role/{roleId}")public BaseResult findAllByRoleId(@PathVariable("roleId") Integer roleId) {//1 条件 roleId = 1QueryWrapper<SysRolePermission> queryWrapper = new QueryWrapper<>();queryWrapper.eq("role_id", roleId); //2 查询所有- 角色权限对象List<SysRolePermission> list = sysRolePermissionService.list(queryWrapper); //3 处理数据,只需要权限idList<Integer> roleIdList = list.stream().map(sysRolePermission -> sysRolePermission.getPermId()).collect(Collectors.toList()); //4 返回return BaseResult.ok("查询成功", roleIdList);} }
3)前端:展示所有的权限
编写变量、发送ajax查询、页面加载成功时调用
使用tree进行展示
<template><div><el-row><el-col :span="16"><el-card class="role-list-card"><div slot="header" class="clearfix"><span>角色列表</span></div><!-- 角色列表 start --><el-table:data="roleList"stripestyle="width: 100%"><el-table-columnprop="id"label="角色ID"fixedwidth="80"></el-table-column><el-table-columnprop="roleName"label="角色名称"fixedwidth="180"></el-table-column><el-table-columnprop="roleDesc"label="角色描述"width="200"></el-table-column><el-table-columnlabel="操作" fixed="right"><template slot-scope="scope"><el-button size="mini">编辑</el-button><el-button size="mini" type="danger">删除</el-button></template></el-table-column></el-table><!-- 角色列表 end --></el-card></el-col><el-col :span="8" style="padding-left: 10px;"><el-card class="perm-list-card"><div slot="header" class="clearfix"><span>权限展示</span><el-button type="primary" style="float: right; padding: 3px 0">授权</el-button></div><!-- 权限展示 start --><el-tree:data="permList"show-checkboxdefault-expand-allnode-key="id"ref="permTree"highlight-current:props="defaultProps"></el-tree><!-- 权限展示 end --></el-card></el-col></el-row></div> </template> <script> export default {data() {return {roleList: [], //角色列表permList: [], //权限列表defaultProps: { //tree提供的数据 与 所需数据 对应关系children: 'children',label: 'permName'}}},methods: {async findAllRole() {// ajaxlet { data: baseResult } = await this.$axios.get('/user-service/role')// 处理if(baseResult.code == 20000) {this.roleList = baseResult.data} else {this.$message.error(baseResult.message)}},async findAllPerm(parentId) {// ajaxlet { data: baseResult } = await this.$axios.get(`/user-service/perm/parent/${parentId}`)// 处理if(baseResult.code == 20000) {this.permList = baseResult.data} else {this.$message.error(baseResult.message)}}},mounted() {// 查询所有的角色this.findAllRole()// 查询所有的一级权限this.findAllPerm(0)}, } </script> <style>.role-list-card {height: 100%;}.perm-list-card {height: 100%;} </style>
4)前端:回显指定角色的权限
表格行的点击,并获得当前行的数据
查询当前角色对应的所有选线,并回显到tree中
async findAllPermByRoleId(row, column, event) {// ajax 查询 /user-service/rolePerm/role/1let { data: baseResult } = await this.$axios.get(`/user-service/rolePerm/role/${row.id}`)// 处理if(baseResult.code == 20000) {// 查询成功,将查询的结果填充到右侧tree中this.$refs.permTree.setCheckedKeys(baseResult.data);} else {this.$message.error(baseResult.message)}}
<template><div><el-row><el-col :span="16"><el-card class="role-list-card"><div slot="header" class="clearfix"><span>角色列表</span></div><!-- 角色列表 start --><el-table:data="roleList"stripe@row-click="findAllPermByRoleId"style="width: 100%"><el-table-columnprop="id"label="角色ID"fixedwidth="80"></el-table-column><el-table-columnprop="roleName"label="角色名称"fixedwidth="180"></el-table-column><el-table-columnprop="roleDesc"label="角色描述"width="200"></el-table-column><el-table-columnlabel="操作" fixed="right"><template slot-scope="scope"><el-button size="mini">编辑</el-button><el-button size="mini" type="danger">删除</el-button></template></el-table-column></el-table><!-- 角色列表 end --></el-card></el-col><el-col :span="8" style="padding-left: 10px;"><el-card class="perm-list-card"><div slot="header" class="clearfix"><span>权限展示</span><el-button type="primary" style="float: right; padding: 3px 0">授权</el-button></div><!-- 权限展示 start --><el-tree:data="permList"show-checkboxdefault-expand-allnode-key="id"ref="permTree"highlight-current:props="defaultProps"></el-tree><!-- 权限展示 end --></el-card></el-col></el-row></div> </template> <script> export default {data() {return {roleList: [], //角色列表permList: [], //权限列表defaultProps: { //tree提供的数据 与 所需数据 对应关系children: 'children',label: 'permName'}}},methods: {async findAllRole() {// ajaxlet { data: baseResult } = await this.$axios.get('/user-service/role')// 处理if(baseResult.code == 20000) {this.roleList = baseResult.data} else {this.$message.error(baseResult.message)}},async findAllPerm(parentId) {// ajaxlet { data: baseResult } = await this.$axios.get(`/user-service/perm/parent/${parentId}`)// 处理if(baseResult.code == 20000) {this.permList = baseResult.data} else {this.$message.error(baseResult.message)}},async findAllPermByRoleId(row, column, event) {// ajax 查询 /user-service/rolePerm/role/1let { data: baseResult } = await this.$axios.get(`/user-service/rolePerm/role/${row.id}`)// 处理if(baseResult.code == 20000) {// 查询成功,将查询的结果填充到右侧tree中this.$refs.permTree.setCheckedKeys(baseResult.data);} else {this.$message.error(baseResult.message)}}},mounted() {// 查询所有的角色this.findAllRole()// 查询所有的一级权限this.findAllPerm(0)}, } </script> <style>.role-list-card {height: 100%;}.perm-list-card {height: 100%;} </style>
5)前端:提交授权表单
<template><div><el-row><el-col :span="16"><el-card class="role-list-card"><div slot="header" class="clearfix"><span>角色列表</span></div><!-- 角色列表 start --><el-table:data="roleList"stripe@row-click="findAllPermByRoleId"style="width: 100%"><el-table-columnprop="id"label="角色ID"fixedwidth="80"></el-table-column><el-table-columnprop="roleName"label="角色名称"fixedwidth="180"></el-table-column><el-table-columnprop="roleDesc"label="角色描述"width="200"></el-table-column><el-table-columnlabel="操作" fixed="right"><template slot-scope="scope"><el-button size="mini">编辑</el-button><el-button size="mini" type="danger">删除</el-button></template></el-table-column></el-table><!-- 角色列表 end --></el-card></el-col><el-col :span="8" style="padding-left: 10px;"><el-card class="perm-list-card"><div slot="header" class="clearfix"><span>权限展示</span><el-button type="primary" @click="addPermWithRoleId" style="float: right; padding: 3px 0">授权</el-button></div><!-- 权限展示 start --><el-tree:data="permList"show-checkboxdefault-expand-allnode-key="id"ref="permTree"highlight-current:props="defaultProps"></el-tree><!-- 权限展示 end --></el-card></el-col></el-row></div> </template> <script> export default {data() {return {roleList: [], //角色列表permList: [], //权限列表defaultProps: { //tree提供的数据 与 所需数据 对应关系children: 'children',label: 'permName'},role: {id: '', //角色idpermIds: [] //所选权限的id}}},methods: {async findAllRole() {// ajaxlet { data: baseResult } = await this.$axios.get('/user-service/role')// 处理if(baseResult.code == 20000) {this.roleList = baseResult.data} else {this.$message.error(baseResult.message)}},async findAllPerm(parentId) {// ajaxlet { data: baseResult } = await this.$axios.get(`/user-service/perm/parent/${parentId}`)// 处理if(baseResult.code == 20000) {this.permList = baseResult.data} else {this.$message.error(baseResult.message)}},async findAllPermByRoleId(row, column, event) {// ajax 查询 /user-service/rolePerm/role/1let { data: baseResult } = await this.$axios.get(`/user-service/rolePerm/role/${row.id}`)// 处理if(baseResult.code == 20000) {// 查询成功,将查询的结果填充到右侧tree中this.$refs.permTree.setCheckedKeys(baseResult.data);// 记录已有数据this.role.id = row.idthis.role.permIds = baseResult.dataconsole.info(this.role)} else {this.$message.error(baseResult.message)}},async addPermWithRoleId() {// 判断是否选择角色if(! this.role.id) {this.$message.warning('请先选择角色')return;}// 更新所选权限this.role.permIds = this.$refs.permTree.getCheckedKeys()// ajax 提交let { data: baseResult } = await this.$axios.post('/user-service/rolePerm/addPerm', this.role)// 提示if(baseResult.code == 20000) {this.$message.success(baseResult.message)} else {this.$message.error(baseResult.message)}}},mounted() {// 查询所有的角色this.findAllRole()// 查询所有的一级权限this.findAllPerm(0)}, } </script> <style>.role-list-card {height: 100%;}.perm-list-card {height: 100%;} </style>
6)后端:授权
编写controller
编写service
编写controller
@PostMapping("/addPerm")public BaseResult addPermWithRoleId(@RequestBody SysRole sysRole) {try {// 添加权限sysRolePermissionService.addPermWithRoleId(sysRole); // 提示return BaseResult.ok("授权成功");} catch (Exception e) {return BaseResult.error("授权失败");} }
编写service
接口
@Service @Transactional public interface SysRolePermissionService extends IService<SysRolePermission> {void addPermWithRoleId(SysRole sysRole); }
实现类
package com.czxy.classes.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.czxy.classes.mapper.SysRolePermissionMapper; import com.czxy.classes.service.SysRolePermissionService; import com.czxy.sys.SysRole; import com.czxy.sys.SysRolePermission; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /*** @author 桐叔* @email liangtong@itcast.cn* @description*/ @Service @Transactional public class SysRolePermissionServiceImpl extends ServiceImpl<SysRolePermissionMapper, SysRolePermission> implements SysRolePermissionService { @Overridepublic void addPermWithRoleId(SysRole sysRole) {// 1 删除QueryWrapper<SysRolePermission> queryWrapper = new QueryWrapper<>();queryWrapper.eq("role_id", sysRole.getId());baseMapper.delete(queryWrapper); // 2 添加for (Integer permId : sysRole.getPermIds()) {SysRolePermission sysRolePermission = new SysRolePermission(sysRole.getId(), permId);baseMapper.insert(sysRolePermission);}} }
6.3.3 添加角色
【学生管理系统】权限管理之角色管理相关推荐
- Oracle数据库的认证方法、用户管理、权限管理和角色管理等
1 Oracle认证方法 操作系统身份认证 网络身份认证 Oracle数据库身份认证 数据库管理员认证 操作系统认证方式 如果采用操作系统认证方式,通常需要在操作系统中创建用户组,并且授予该组DBA权 ...
- 权限组件(6):权限分配的角色管理
效果图: 为了方便开发,先把中间件注释掉,要不还要在角色-权限表中添加对应关系.又因为二级菜单和面包屑导航需要中间件的变量,所以要在layout.html里面把这两个也注释掉. setting.py ...
- 学生管理系统的注册登录以及管理的具体实现
题目要求: 编写程序:实现登录注册功能,程序一进来如果没有账号就选择注册,如果有账号就直接登录. 注册功能的时候要输入注册账号.设置密码.输入确认密码.输入邮箱号码.输入性别.输入个人简介.输入你的身 ...
- ztree 默认选中节点_用户管理、角色管理、模块管理、zTree的使用
全部都是增删改查 修改mapper,service,controller,jsp 给角色分配权限 1.1 跳转分配权限页面 1.1.1 jsp //实现权限 function toModule() { ...
- ztree 异步展开节点显示不出来_用户管理、角色管理、模块管理、zTree的使用
全部都是增删改查 修改mapper,service,controller,jsp 给角色分配权限 1.1 跳转分配权限页面 1.1.1 jsp //实现权限 function toModule() { ...
- 分布式医疗云平台(项目功能简介截图)【系统管理(科室管理、用户管理、角色管理、菜单管理 、字典管理、通知公告管理 、检查费用设置、挂号费用设置 )】】(四)-全面详解(学习总结---从入门到深化)
项目功能截图 1. 系统管理 1.1.科室管理 1.2.用户管理 1.3.角色管理 1.4.菜单管理
- 【学生管理系统】权限管理之角色管理—添加角色并添加对应角色的权限
目录 一.添加角色 1.1 前端 1)页面效果展示 2)前端代码 1.2 后端 1)效果展示 2)后端代码
- RabbitMQ:入门(三)——RabbitMQ用户管理、角色管理与权限管理
1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码. 相应的命令 (1) 新增一个用户 rabbitmqctl add_user Username Password (2 ...
- ThinkPHP代码生成器快速开发框架:ThinkPHP+VUE+APIdoc+Restful+Oauth2.0+代码生成器+系统基础功能(用户管理、菜单管理、角色管理、权限管理、字典管理、部门管理)
Wedo快速开发框架 https://github.com/weidong100/Wedo 根据数据表,快速生成控制器.模型.VUE界面.接口文档! 系统组成: PHP框架使用ThinkPHP5,官网 ...
最新文章
- BZOJ 1174: [Balkan2007]Toponyms
- 关于ubuntu的root密码问题
- dart系列之:dart中的异步编程
- tif 高程_使用ArcGIS提取高程点
- python通过ssh配置交换机_配置(通过SSH)Cisco交换机的Python脚本
- 信息安全工程师笔记-入侵检测技术原理与应用
- 目标检测网络中的 bottom-up 和 top-down理解
- linux中fork()函数具体解释(原创!!实例解说)
- 美团外卖批量投放智能安全头盔:骑手可语音处理订单
- 【Elasticsearch】Bkd-Tree 在 Lucene 中的实现
- 中国医科大学计算机应用基础本科在线作业,17秋中国医科大学《计算机应用基础(本科)》在线作业...
- pl/sql操作数据库之触发器的使用
- WCF Data Services查询
- 全能地图工具共享及操作规范
- retainall的问题
- 2022 年要了解的新兴安全供应商
- 论坛介绍 | COSCon'22 开源操作系统(O)
- 大球分析系统_走地大球分析系统app
- 数字图像处理之图像修复
- python列表可以放不同类型_python基础篇数据类型之二——列表(List)
热门文章
- HR 黑话大全:那些残忍的潜台词
- 《AngularJS入门与进阶》图书简介
- html导出excel表头多了一行空行,Excel中批量插入空行的技巧,会用2个算你厉害
- three.js改变模型局部颜色(vue)
- Ruby学习入门命令
- AIGC(AI Generated Content,人工智能生成内容)
- Windows中cuda安装教程及调试Error总结
- Java获取每天八点或第二天八点的时间戳
- 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl
- 荣耀换鸿蒙系统,荣耀手机能升级鸿蒙系统吗,支持鸿蒙系统的荣耀手机有哪些...