实战13 分配角色

目录

1、分配角色思路

2、分配角色回显接口实现

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码 

 3.3 编写分配角色回显脚本代码

4、分配角色后端接口

4.1 UserRoleDTO

4.2 UserMapper

4.3 UserMapper.xml

4.4 UserService

4.5 UserServiceImpl

4.6 UserController

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件


1、分配角色思路

2、分配角色回显接口实现

RoleMapper

    /*** 根据用户ID查询该用户拥有的角色ID* @param userId* @return*/@Select("select role_id from `sys_user_role` where user_id = #{userId}")List<Long> findRoleIdByUserId(Long userId);

RoleService

    /*** 根据用户ID查询该用户拥有的角色ID* @param userId* @return*/List<Long> findRoleIdByUserId(Long userId);

RoleServiceImpl

    /*** 根据用户ID查询该用户拥有的角色ID** @param userId* @return*/@Overridepublic List<Long> findRoleIdByUserId(Long userId) {return baseMapper.findRoleIdByUserId(userId);}

UserController

/*** 获取分配角色列表* @param roleQueryVo* @return*/@GetMapping("/getRoleListForAssign")@PreAuthorize("hasAuthority('sys:user:assign')")public Result getRoleListForAssign(RoleQueryVo roleQueryVo){//创建分页对象IPage<Role> page = new Page<Role>(roleQueryVo.getPageNo(), roleQueryVo.getPageSize());//调用查询方法roleService.findRoleListByUserId(page,roleQueryVo);//返回数据return Result.ok(page);}/*** 根据用户ID查询该用户拥有的角色列表* @param userId* @return*/@GetMapping("/getRoleByUserId/{userId}")@PreAuthorize("hasAuthority('sys:user:assign')")public Result getRoleByUserId(@PathVariable Long userId){//调用根据用户ID查询该用户拥有的角色ID的方法List<Long> roleIds = roleService.findRoleIdByUserId(userId);return Result.ok(roleIds);}

3、分配角色回显前端实现

3.1 编写前端api脚本代码

3.2 编写分配角色窗口代码 

 <!-- 分配角色窗口 --><system-dialog:title="assignDialog.title":height="assignDialog.height":width="assignDialog.width":visible="assignDialog.visible"@onClose="onAssignClose"@onConfirm="onAssignConfirm"><div slot="content"><!-- 分配角色数据列表 --><el-tableref="assignRoleTable":data="assignRoleList"borderstripe:height="assignHeight"style="width: 100%; margin-bottom: 10px"@selection-change="handleSelectionChange"><el-table-column type="selection" width="55" align="center"></el-table-column><el-table-column prop="roleCode" label="角色编码"/><el-table-column prop="roleName" label="角色名称"/><el-table-column prop="remark" label="角色备注"/></el-table><!-- 分页工具栏 --><el-pagination@size-change="assignSizeChange"@current-change="assignCurrentChange":current-page.sync="roleVo.pageNo":page-sizes="[10, 20, 30, 40, 50]":page-size="roleVo.pageSize"layout="total, sizes, prev, pager, next, jumper":total="roleVo.total"background></el-pagination></div></system-dialog>

 3.3 编写分配角色回显脚本代码

 /*** 打开分配角色*/async assignRole(row){//防止回显出现问题this.selectedIds = [];this.selectedUserId = "";//被分配用户的idthis.selectedUserId = row.id;//显示窗口this.assignDialog.visible = true;//设置标题this.assignDialog.title = `给【${row.realName}】分配角色`;//查询当前登录用户的所有角色信息await this.getAssignRoleList();//获取当前被分配用户的IDlet params = {userId: row.id,};//发送根据用户ID查询角色列表的请求let res = await userApi.getRoleIdByUserId(params);//如果存在数据if (res.success && res.data){//将查询到的角色ID列表交给选中角色数组this.selectedIds = res.data;//循环遍历this.selectedIds.forEach((key) => {this.assignRoleList.forEach((item) => {if (item.id === key) {this.$refs.assignRoleTable.toggleRowSelection(item, true);}});});}},/*** 查询当前登录用户的所有角色信息*/async getAssignRoleList(pageNo = 1, pageSize = 10) {//给用户ID赋值this.roleVo.userId = this.$store.getters.userId;this.roleVo.pageNo = pageNo;this.roleVo.pageSize = pageSize;//发送查询请求let res = await userApi.getAssignRoleList(this.roleVo);//判断是否成功if (res.success) {//角色列表赋值this.assignRoleList = res.data.records;//角色总数量赋值this.roleVo.total = res.data.total;}},/*** 分配角色取消事件*/onAssignClose(){//隐藏窗口this.assignDialog.visible = false;},/*** 分配角色确认事件*/async onAssignConfirm(){//判断用户是否有选中角色if (this.selectedIds.length === 0) {this.$message.warning("请选择要分配的角色!");return;}let params = {userId: this.selectedUserId,roleIds: this.selectedIds,};//发送请求let res = await userApi.assignRoleSave(params);//判断是否成功if (res.success) {this.$message.success(res.message);//关闭窗口this.assignDialog.visible = false;} else {this.$message.error(res.message);}},/*** 当每页数量发生变化时触发该事件*/assignSizeChange(size){this.roleVo.pageSize = size; //将每页显示的数量交给成员变量this.getAssignRoleList(this.roleVo.pageNo, size);},/*** 当页码发生变化时触发该事件*/assignCurrentChange(page){this.roleVo.pageNo = page;//调用查询方法this.getAssignRoleList(page, this.roleVo.pageSize);},/*** 当点击多选框时触发该事件*/handleSelectionChange(rows){// let roleIds = [];// //循环遍历选中的角色ID// for (let i = 0; i < rows.length; i++) {//   //将当前选中的角色ID放到数组中//   roleIds.push(rows[i].id);// }// //将选中的角色ID交给成员变量// this.selectedIds = roleIds;this.selectedIds = rows.map(item => item.id);//等同于上述代码}

4、分配角色后端接口

4.1 UserRoleDTO

package com.cizhu.dto;import lombok.Data;import java.util.List;/*** @author bingo* @description 用于给用户分配角色时保存选中的角色数据* @date 2022-11-09*/
@Data
public class UserRoleDTO {private Long userId;private List<Long> roleIds;
}

4.2 UserMapper

    /*** 保存用户角色关系* @param userId* @param roleIds* @return*/int saveUserRole(Long userId, List<Long> roleIds);

4.3 UserMapper.xml

    <insert id="saveUserRole">insert into sys_user_role(user_id,role_id) values<foreach collection="roleIds" item="item" index="index" separator=",">(#{userId},#{item})</foreach></insert>

4.4 UserService

   /*** 分配角色* @param userId* @param roleIds* @return*/boolean saveUserRole(Long userId, List<Long> roleIds);

4.5 UserServiceImpl

    /*** 分配角色** @param userId* @param roleIds* @return*/@Override@Transactional(rollbackFor = RuntimeException.class)public boolean saveUserRole(Long userId, List<Long> roleIds) {//删除该用户对应的角色信息baseMapper.deleteUserRole(userId);//保存用户角色信息return baseMapper.saveUserRole(userId,roleIds)>0;}

4.6 UserController

/*** 分配角色* @param userRoleDTO* @return*/@PostMapping("/saveUserRole")@PreAuthorize("hasAuthority('sys:user:assign')")public Result saveUserRole(@RequestBody UserRoleDTO userRoleDTO){if (userService.saveUserRole(userRoleDTO.getUserId(),userRoleDTO.getRoleIds())) {return Result.ok().message("角色分配成功");}return Result.error().message("角色分配失败");}

5、分配角色前端实现

5.1 前端API脚本

5.2 分配角色窗口确认事件

/*** 当点击多选框时触发该事件*/handleSelectionChange(rows){// let roleIds = [];// //循环遍历选中的角色ID// for (let i = 0; i < rows.length; i++) {//   //将当前选中的角色ID放到数组中//   roleIds.push(rows[i].id);// }// //将选中的角色ID交给成员变量// this.selectedIds = roleIds;this.selectedIds = rows.map(item => item.id);//等同于上述代码}
/*** 分配角色确认事件*/async onAssignConfirm(){//判断用户是否有选中角色if (this.selectedIds.length === 0) {this.$message.warning("请选择要分配的角色!");return;}let params = {userId: this.selectedUserId,roleIds: this.selectedIds,};//发送请求let res = await userApi.assignRoleSave(params);//判断是否成功if (res.success) {this.$message.success(res.message);//关闭窗口this.assignDialog.visible = false;} else {this.$message.error(res.message);}},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.Net实现新闻添加查询(三层架构,含照片)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 ​编辑 点击Button添加 步骤&#xff1a; 1、建文件 ​编辑 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作…

vue3+elementPlus:el-drawer新增修改弹窗复用

在el-drawer的属性里设置:title属性&#xff0c;和重置函数 //html<!-- 弹窗 --><el-drawerv-model"drawer":title"title":size"505":direction"direction":before-close"handleClose"><el-formlabel-posit…

数据挖掘(作业3

任务一 对以下数据集使用K均值聚类算法&#xff1a; 1&#xff09;观察实验结果是否符合预期&#xff1b; 2&#xff09;利用SSE标准确定K值&#xff1b; 3&#xff09;自行调参并观察对聚类结果的影响。 注意&#xff1a;需要把类别信息去掉。 “tutorial3_Data Explorat…

HTTP代理服务器:Go语言下的“网络翻译官”

开场白&#xff1a;在这个全球化的网络时代&#xff0c;有时我们需要一个“翻译官”来帮助不同系统、不同语言进行交流。今天&#xff0c;我们就来探讨如何使用Go语言&#xff0c;轻松实现这样一个角色——HTTP代理服务器&#xff0c;让我们的网络请求更加畅通无阻&#xff01;…

模式识别与机器学习-无监督学习-聚类

无监督学习-聚类 监督学习&无监督学习K-meansK-means聚类的优点&#xff1a;K-means的局限性&#xff1a;解决方案&#xff1a; 高斯混合模型&#xff08;Gaussian Mixture Models&#xff0c;GMM&#xff09;多维高斯分布的概率密度函数&#xff1a;高斯混合模型&#xff…

c语言用四种方式求解成绩之中最高分和最低分的差值

文章目录 一&#xff0c;题目二&#xff0c;方法1&#xff0c;方法一2&#xff0c;方法二3&#xff0c;方法三4&#xff0c;方法四 三&#xff0c;示例结果 一&#xff0c;题目 最高分最低分之差 输入n个成绩&#xff0c;换行输出n个成绩中最高分数和最低分数的差 输入 : 两行…

信息网络协议基础-IPv6协议

文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…

浅谈WPF之ToolTip工具提示

在日常应用中&#xff0c;当鼠标放置在某些控件上时&#xff0c;都会有相应的信息提示&#xff0c;从软件易用性上来说&#xff0c;这是一个非常友好的功能设计。那在WPF中&#xff0c;如何进行控件信息提示呢&#xff1f;这就是本文需要介绍的ToolTip【工具提示】内容&#xf…

自动备份B站Up主最新视频到百度网盘的Python脚本详解

自动备份B站Up主最新视频脚本详解&#xff08;Win和Linux有些不同&#xff09; 前言&#xff1a; 次篇文章启发于某些大胆的UP主&#xff08;老马&#xff09;的多次被封&#xff0c;并被下架一些视频。有些人并不能及时观看到&#xff0c;故写一个脚本自动下载最新视频。 &am…

中小企业运营难题:CRM系统为您解决!

​CRM如何帮助中小企业解决业务与团队之间的问题&#xff1f;它可以帮助企业获取潜在客户、数据储存管理、建立标准化流程、减少客户流失、促进客户沟通等。客户关系管理的核心理念要以客户为最主要的资源&#xff0c;提供全面的客户服务&#xff0c;满足客户要求&#xff0c;实…

【信息安全原理】——入侵检测与网络欺骗(学习笔记)

&#x1f4d6; 前言&#xff1a;在网络安全防护领域&#xff0c;防火墙是保护网络安全的一种最常用的设备。网络管理员希望通过在网络边界合理使用防火墙&#xff0c;屏蔽源于外网的各类网络攻击。但是&#xff0c;防火墙由于自身的种种限制&#xff0c;并不能阻止所有攻击行为…

C++构建简单静态库实例(cmakelist)

一、开发实例 通过cmake构建静态开发实例如下: 1.1 代码目录 代码目录结构如下: 1.2 代码内容 1.2.1 CMakeLists.txt # CMake 最低版本要求 cmake_minimum_required(VERSION 3.10)# 项目名称 project(mylib)# 添加源文件 set(SOURCE_FILESsrc/mylib

每日一题(LeetCode)----二叉树-- 二叉树的右视图

每日一题(LeetCode)----二叉树-- 二叉树的右视图 1.题目&#xff08;199. 二叉树的右视图&#xff09; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,nu…

助力打造清洁环境,基于美团最新YOLOv6-4.0开发构建公共场景下垃圾堆放垃圾桶溢出检测识别系统

公共社区环境生活垃圾基本上是我们每个人每天几乎都无法避免的一个问题&#xff0c;公共环境下垃圾投放点都会有固定的值班时间&#xff0c;但是考虑到实际扔垃圾的无规律性&#xff0c;往往会出现在无人值守的时段内垃圾堆放垃圾桶溢出等问题&#xff0c;有些容易扩散的垃圾比…

Apache Flink连载(十八):Flink On Yarn运行原理及环境准备

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Flink On Yarn运行原理…

【Pytorch】学习记录分享8——PyTorch自然语言处理基础-词向量模型Word2Vec

【Pytorch】学习记录分享7——PyTorch自然语言处理基础-词向量模型Word2Vec 1. 词向量模型Word2Vec)1. 如何度量这个单词的&#xff1f;2.词向量是什么样子&#xff1f;3.词向量对应的热力图&#xff1a;4.词向量模型的输入与输出![在这里插入图片描述](https://img-blog.csdni…

IT安全:实时网络安全监控

了解庞大而复杂的网络环境并非易事&#xff0c;它需要持续观察、深入分析&#xff0c;并对任何违规行为做出快速反应。这就是为什么实时网络安全监控工具是任何组织 IT 安全战略的一个重要方面。 网络攻击和合规性法规是 IT 安全的两个主要驱动因素。同时&#xff0c;数据泄露…

卷积神经网络 反向传播

误差的计算 softmax 经过softmax处理后所有输出节点概率和为1 损失&#xff08;激活函数&#xff09; 多分类问题&#xff1a;输出只可能归于某一个类别&#xff0c;不可能同时归于多个类别。 误差的反向传播 求w的误差梯度 权值的更新 首先是更新输出层和隐藏层之间的权重…

Oracle数据updater如何回滚

1.查询update语句执行的时间节点 &#xff1b; select t.FIRST_LOAD_TIME, t.SQL_TEXT from v$sqlarea t where to_char(t.FIRST_LOAD_TIME) > 2023-03-19/17:00:00 order by t.FIRST_LOAD_TIME desc;开启表的行迁移 alter table test enable row movement;3.回滚表数据到…

【架构】企业信息安全体系架构详解

企业信息安全体系架构来说,是包含技术、运维、管理3个层面。本文说的安全架构,主要集中讨论偏研发技术层面的安全架构。 安全性是软件研发技术体系,系统架构设计阶段的一个关键DFX能力,与可靠性、可服务性、性能等架构属性并列。由于安全性设计自身的特点,涉及到系统架构…