首页 > 其他分享 >【学生管理系统】权限管理之角色管理

【学生管理系统】权限管理之角色管理

时间:2022-12-27 15:36:30浏览次数:40  
标签:baseResult 管理系统 管理 查询 import message 权限 data id


目录

​​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"
stripe
style="width: 100%">
<el-table-column
prop="id"
label="角色ID"
fixed
width="80">
</el-table-column>
<el-table-column
prop="roleName"
label="角色名称"
fixed
width="180">
</el-table-column>
<el-table-column
prop="roleDesc"
label="角色描述"
width="200">
</el-table-column>
<el-table-column
label="操作"
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() {
// ajax
let { 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注解版
  1. 编写PermMapper:查询指定父id的所有权限,需配置关联项(当前权限的所有的孩子)
  2. 编写service:查询所有
  3. 编写controller:查询所有
  1. 编写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 桐叔 * @description */ @Mapper public interface SysPermissionMapper extends BaseMapper<SysPermission> {    /**     * 通过父id查询所有的权限     * @author 桐叔     * @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) ; }
  2. 编写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 桐叔 * @description */ @Service @Transactional public class SysPermissionServiceImpl extends ServiceImpl<SysPermissionMapper, SysPermission> implements SysPermissionService {    @Override    public List<SysPermission> findAllByParentId(Integer parentId) {        return baseMapper.findAllByParentId(parentId);   } }
  1. 编写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 桐叔 * @description */ @RestController @RequestMapping("/perm") public class SysPermissionController {    @Resource    private SysPermissionService sysPermissionService;    /**     * 查询所有,含孩子     * @author 桐叔     * @email [email protected]     * @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]

【学生管理系统】权限管理之角色管理_nuxt.js


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 [email protected]
* @description
*/
@RestController
@RequestMapping("/rolePerm")
public class SysRolePermissionController {
@Resource
private SysRolePermissionService sysRolePermissionService;

@GetMapping("/role/{roleId}")
public BaseResult findAllByRoleId(@PathVariable("roleId") Integer roleId) {
//1 条件 roleId = 1
QueryWrapper<SysRolePermission> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id", roleId);

//2 查询所有- 角色权限对象
List<SysRolePermission> list = sysRolePermissionService.list(queryWrapper);

//3 处理数据,只需要权限id
List<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"
stripe
style="width: 100%">
<el-table-column
prop="id"
label="角色ID"
fixed
width="80">
</el-table-column>
<el-table-column
prop="roleName"
label="角色名称"
fixed
width="180">
</el-table-column>
<el-table-column
prop="roleDesc"
label="角色描述"
width="200">
</el-table-column>
<el-table-column
label="操作"
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-checkbox
default-expand-all
node-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() {
// ajax
let { 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) {
// ajax
let { 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中

【学生管理系统】权限管理之角色管理_学生管理系统_02

 


async findAllPermByRoleId(row, column, event) {
// ajax 查询 /user-service/rolePerm/role/1
let { 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-column
prop="id"
label="角色ID"
fixed
width="80">
</el-table-column>
<el-table-column
prop="roleName"
label="角色名称"
fixed
width="180">
</el-table-column>
<el-table-column
prop="roleDesc"
label="角色描述"
width="200">
</el-table-column>
<el-table-column
label="操作"
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-checkbox
default-expand-all
node-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() {
// ajax
let { 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) {
// ajax
let { 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/1
let { 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)前端:提交授权表单

【学生管理系统】权限管理之角色管理_nuxt.js_03

 


<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-column
prop="id"
label="角色ID"
fixed
width="80">
</el-table-column>
<el-table-column
prop="roleName"
label="角色名称"
fixed
width="180">
</el-table-column>
<el-table-column
prop="roleDesc"
label="角色描述"
width="200">
</el-table-column>
<el-table-column
label="操作"
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-checkbox
default-expand-all
node-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: '', //角色id
permIds: [] //所选权限的id
}
}
},
methods: {
async findAllRole() {
// ajax
let { 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) {
// ajax
let { 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/1
let { 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.id
this.role.permIds = baseResult.data
console.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);
}
  • 接口




  • 实现类


6.3.3 添加角色

标签:baseResult,管理系统,管理,查询,import,message,权限,data,id
From: https://blog.51cto.com/u_15680317/5972849

相关文章

  • 职工管理系统
    1、管理系统需求管理公司所有员工的信息基于C++和多态进行实现公司员工分为三类:老板普工经理显示信息:职工编号姓名岗位职责普工职责:完成经理交代的任务经理职责......
  • fisco和fabric权限管理的区别
    fisco和fabric权限管理的区别​​一、FISCOBCOS权限管理​​​​引言​​​​如何使用角色权限?​​​​总结​​​​二、Fabric权限管理​​​​三、二者比较​​​​参......
  • 图表控件LightningChart.NET 系列教程(六):许可证管理介绍(上)
    LightningChart.NET SDK是一款高性能数据可视化插件工具,由数据可视化软件组件和工具类组成,可支持基于Windows 的用户界面框架(WindowsPresentationFoundation)、Window......
  • Linux档案权限不目录配置
    如何改变文件属怅不权限:chgrp,chown,chmodLinux用户身份不群组记彔的档案在我们Linux系统当中,默认的情况下,所有的系统上的账号不一般身份使用者,还有那个root的相......
  • 图表控件LightningChart.NET 系列教程(六):许可证管理介绍(中)
    LightningChart.NET SDK是一款高性能数据可视化插件工具,由数据可视化软件组件和工具类组成,可支持基于Windows 的用户界面框架(WindowsPresentationFoundation)、Window......
  • 【Vue 中 Axios 的封装和 API 接口的管理】
    一.封装各模块作用引入一般我会在项目的src目录中,新建一个request文件夹,然后在里面新建一个http.js和一个api.js文件。http.js文件用来封装我们的axios,api.js用来统一管理......
  • MES系统帮助车间智慧生产管理
    工业数字化转型,通过业务流全数字化为基础,经过数据和优化,保证内部运作的高效。通过MES系统数字化转型,能实现数据自动流,让企业在不确定的环境下具有相应能力,从而实现精准、高......
  • 论文管理:zotero的安装和插件使用
    zotero的安装和插件使用​​1.下载软件​​​​2.安装插件​​​​(1)Sci-hub​​​​(2)扩展搜索引擎​​​​(3)茉莉花插件​​​​(4)中文参考文献​​​​(5)Delitemwithatt​​​......
  • 试卷审批管理信息系统--学生注册和审查
    首先进行学生注册代码如下:1<%@pagecontentType="text/html;charset=UTF-8"language="java"%>2<html>3<head>4<title></title>5</head>6<body>......
  • 记录几个新发现的优秀CRM客户管理系统
    近期寻找CRM系统,前后试用了十几款,在这个过程中体验了一些名不符实的软件,也发现了一些优秀却不够知名的产品,特此记录几个以作备忘。 蓝点客户关系管理系统知名度不高,但......