知识库使用VIEW视图实现内部用户、组关联关系和flowable内置表打通

文章目录

          • 一、SQL
            • 1.1. role表新增角色标识
            • 1.2. 新增用户角色关系表
            • 1.3. 数据复制
            • 1.4. 设计视图
            • 1.5. 完成版视图
          • 二、用户角色关系
            • 2.1. 创建UserRole实体类
            • 2.2. 持久层接口
            • 2.3. 逻辑层
            • 2.4. xml映射
            • 2.5.
          • 三、现代码调整
            • 3.1. 新增标识
            • 3.2. 删除用户关联条件
            • 3.3. 删除角色判断
          • 四、工作流业务模块调整
            • 4.1. 关联关系调整
            • 4.2. 节点提交调整
          • 五、登陆调整
            • 5.1.内置用户

一、SQL
1.1. role表新增角色标识
ALTER TABLE sys_role ADD role_key varchar(255)  COMMENT '角色标识';
1.2. 新增用户角色关系表
CREATE TABLE `sys_user_role` (`user_id` bigint(20) NOT null COMMENT '用户id',`role_id` bigint(20) NOT null COMMENT '角色id',PRIMARY KEY (`user_id`,`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户和角色关联表';
1.3. 数据复制

将act_id_membership表中数据复制到新增sys_user_role表中,修改表名、字段名称

1.4. 设计视图

视图设计要点:
对应关系
业务场景
补充:由于工作流act_id_user表中的_ID是账户,因此,系统用户表中的account 和 act_id_user表中的_ID对应

sql

--角色表
SELECT `r`.`role_key` AS `ID_`,NULL AS `REV_`, `r`.`name` AS `NAME_`,'assignment' AS `TYPE_` FROM `sys_role` `r`;--用户角色中间表
SELECT(SELECT`u`.`account` FROM `sys_user` `u` WHERE( `u`.`user_id` = `ur`.`user_id`)) AS `USER_ID_`,(SELECT `r`.`role_key` FROM `sys_role` `r` WHERE( `r`.`role_id` = `ur`.`role_id` )) AS `GROUP_ID_` FROM `sys_user_role` `ur`;--用户表
SELECT `u`.`account` AS `ID_`,0 AS `REV_`, `u`.`name` AS `FIRST_`,'' AS `LAST_`, `u`.`email` AS `EMAIL_`, `u`.`password` AS `PWD_`,'' AS `PICTURE_ID_` FROM `sys_user` `u`;
1.5. 完成版视图
--视图
-- ----------------------------
-- View structure for act_id_group
-- ----------------------------
DROP VIEW IF EXISTS `act_id_group`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `act_id_group` AS SELECT `r`.`role_key` AS `ID_`,NULL AS `REV_`, `r`.`name` AS `NAME_`,'assignment' AS `TYPE_` FROM `sys_role` `r`;-- ----------------------------
-- View structure for act_id_membership
-- ----------------------------
DROP VIEW IF EXISTS `act_id_membership`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `act_id_membership` AS SELECT(SELECT`u`.`account` FROM `sys_user` `u` WHERE( `u`.`user_id` = `ur`.`user_id`)) AS `USER_ID_`,(SELECT `r`.`role_key` FROM `sys_role` `r` WHERE( `r`.`role_id` = `ur`.`role_id` )) AS `GROUP_ID_` FROM `sys_user_role` `ur`;-- ----------------------------
-- View structure for act_id_user
-- ----------------------------
DROP VIEW IF EXISTS `act_id_user`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `act_id_user` AS SELECT `u`.`account` AS `ID_`,0 AS `REV_`, `u`.`name` AS `FIRST_`,'' AS `LAST_`, `u`.`email` AS `EMAIL_`, `u`.`password` AS `PWD_`,'' AS `PICTURE_ID_` FROM `sys_user` `u`;
二、用户角色关系
2.1. 创建UserRole实体类
package com.gblfy.modular.system.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;/*** <p>* 角色和菜单关联表* </p>** @author gblfy* @since 2019/11/12*/
@TableName("sys_user_role")
public class UserRole implements Serializable {private static final long serialVersionUID = 1L;/*** 菜单id*/@TableField("user_id")private Long userId;/*** 角色id*/@TableField("role_id")private Long roleId;public Long getUserId() {return userId;}public void setUserId(Long userId) {this.userId = userId;}public Long getRoleId() {return roleId;}public void setRoleId(Long roleId) {this.roleId = roleId;}@Overridepublic String toString() {return "UserRole{" +"userId=" + userId +", roleId=" + roleId +'}';}
}
2.2. 持久层接口
package com.gblfy.modular.system.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gblfy.modular.system.entity.UserRole;import java.util.List;/*** <p>* 用户角色关系表 Mapper 接口* </p>** @author gblfy* @since 2019/11/05*/
public interface UserRoleMapper extends BaseMapper<UserRole> {/*** 批量新增用户角色信息** @param userRoleList 用户角色列表* @return 结果*/public int batchUserRole(List<UserRole> userRoleList);/*** 通过用户ID删除用户和角色关联** @param userId 用户ID* @return 结果*/public int deleteUserRoleByUserId(Long userId);
}
2.3. 逻辑层
package com.gblfy.modular.system.service;import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gblfy.modular.system.entity.User;
import com.gblfy.modular.system.entity.UserRole;
import com.gblfy.modular.system.mapper.UserMapper;
import com.gblfy.modular.system.mapper.UserRoleMapper;
import com.gblfy.modular.system.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;/*** <p>* 用户角色关系表 服务实现类* </p>** @author gblfy* @since 2019/11/07*/
@Service
public class UserRoleService extends ServiceImpl<UserMapper, User> {@Autowiredprivate UserRoleMapper userRoleMapper;/*** 分配角色** @param userId* @param roleIds*/public void assignRoles(Long userId, String roleIds) {// 删除用户与角色关联userRoleMapper.deleteUserRoleByUserId(userId);// 新增用户与角色管理insertUserRole(userId,roleIds);}/*** 新增用户角色信息** @param userId* @param roleIds*/public void insertUserRole(Long userId, String roleIds) {Long[] roles = Convert.toLongArray(roleIds.split(","));if (StringUtils.isNotNull(roles)) {// 新增用户与角色管理List<UserRole> list = new ArrayList<UserRole>();for (Long roleId : roles) {UserRole ur = new UserRole();ur.setUserId(userId);ur.setRoleId(roleId);list.add(ur);}if (list.size() > 0) {userRoleMapper.batchUserRole(list);}}}// public static void main(String[] args) {//     String roleIds = "1,2,3,4,5";//     Long[] roles = Convert.toLongArray(roleIds.split(","));//     for (Long role : roles) {//         System.out.println(JSON.toJSONString(role, true));//     }//// }
}
2.4. xml映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gblfy.modular.system.mapper.UserRoleMapper"><insert id="batchUserRole">insert into sys_user_role (user_id, role_id) values<foreach item="item" index="index" collection="list" separator=",">(#{item.userId},#{item.roleId})</foreach></insert><delete id="deleteUserRoleByUserId" parameterType="Long">deletefrom sys_user_rolewhere user_id = #{userId}</delete>
</mapper>
2.5.
三、现代码调整
3.1. 新增标识
Role实体类新增role_key标识
Role.xml新增role_key标识
前台role添加页面新增role_key标识
3.2. 删除用户关联条件

删除用户并删除用户角色中间表数据

3.3. 删除角色判断

删除角色需要判断该角色下是否存在用户,如果存在则需要先删除该角色下的所有用户

四、工作流业务模块调整
4.1. 关联关系调整

将系统工作流act_id_user中_ID 关联sys_user中的账户,
act_id_group中的_ID采用sys_role中的role_key标识
以前的id均调整为账户account和rile_key

4.2. 节点提交调整

将节点提交用户id和角色id调整为account和role_key
注:account表示工作流用户 role_key表示工作流角色

五、登陆调整
5.1.内置用户

使用admin用户部署

User user = new UserEntityImpl();
user.setId("admin");
SecurityUtils.assumeUser(user);

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

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

相关文章

阿里云与A站在一起后,悄悄干了件大事

八月盛夏&#xff0c;“AcFun弹幕视频网站”&#xff08;简称“A站”&#xff09;的视频服务器全面迁移上阿里云&#xff08;此处应有掌声&#xff09;&#xff01; A站去年与阿里云达成此项合作。在迁移过程中&#xff0c;阿里云提供专业技术解决方案团队&#xff0c;为A站建立…

科大讯飞营收破百亿,员工涨薪27%,羡慕这个AI“老大哥”​了!

科大讯飞&#xff0c;中国AI公司“老大哥”&#xff0c;交出2019年成绩单。营收达到100.79亿&#xff0c;首次破百亿&#xff1b;净利润同比增长51.12%&#xff0c;达到8.19亿&#xff0c;日均盈利224万元&#xff0c;创下历史最佳业绩。与此同时&#xff0c;5大厂2020年应届生…

Knative Serving 之路由管理和 Ingress

Knative 默认会为每一个 Service 生成一个域名&#xff0c;并且 Istio Gateway 要根据域名判断当前的请求应该转发给哪个 Knative Service。Knative 默认使用的主域名是 example.com&#xff0c;这个域名是不能作为线上服务的。本文我首先介绍一下如何修改 默认主域名&#xff…

linux-centos7 关机命令、系统目录结构介绍

1、关机命令 关机指令 shutdown; sync # 将数据由内存同步到硬盘中&#xff0c;一般关机前需要同步一下&#xff0c;防止数据丢失shutdown # 关机指令&#xff0c;会在一定时间后关机&#xff0c;我试的是一分钟后关机shutdown -h 10 # 十分钟后关机 shutdown -h 10 # 十分…

SprinBoot2.X 集成 Flowable6.6 工作流引擎

上一篇&#xff1a;SpringBoot2.x Flowable 6.4.2 开源项目 码云开源地址&#xff1a;https://gitee.com/lwj/flow GitHub开源地址&#xff1a;https://github.com/ecnice/flow flowable学习 可以入群&#xff1a;633168411 说明:此项目是我师傅为了帮助更多小伙伴们入门工作流…

OceanBase高可用实践

背景 高可用是构建分布式系统的基石。一方面&#xff0c;出于成本考虑&#xff0c; 分布式系统往往采取比较廉价的硬件&#xff0c;其可靠性相对于小型机、专有硬件有很大的不足&#xff0c; 而分布式系统的规模一般比较大&#xff0c;假如硬件的可靠性只有三个9(99.9%)&#…

咦,拆分个字符串都这么讲究?

来源 | 沉默王二封图 | CSDN 付费下载于视觉中国提到拆分字符串&#xff0c;我猜你十有八九会撂下一句狠话&#xff0c;“这有什么难的&#xff0c;直接上 String 类的 split() 方法不就拉到了&#xff01;”假如你真的这么觉得&#xff0c;那可要注意了&#xff0c;事情远没这…

linux-centos7 常用的基本命令--目录管理、基本属性

一、目录管理 1、cd &#xff08;切换目录&#xff09; cd 路径 &#xff1a;切换路径命令&#xff0c;路径可以是绝对路径&#xff0c;也可以是相对路径 ./ : 当前目录 返回上级目录&#xff1a; cd … 返回用户目录&#xff1a; cd ~ 2、ls&#xff08;列出目录&#xff…

开源考试系统 - 本地代码调试运行

文章目录一、后端部署1. 图形化克隆项目2. 命令克隆项目3. 创建数据库&#xff0c;初始化数据库脚本4. IntelliJ IDEA打开项目5. 数据库连接和redis配置6. 启动redis和后端程序6. 浏览器访问二、前端部署2.1. 打开源码安装依赖2.2. 依次启动admin端和student端2.3. 浏览器访问补…

KDD 2019论文解读:异构信息网络上的对抗生成学习

前言 网络表示学习是一种在低维空间中表示网络数据的方法&#xff0c;在异构信息网络分析中得到了广泛的应用。现有的异构信息网络表示学习方法虽然在一定程度上实现了性能的提高&#xff0c;但仍然存在一些主要的不足。最重要的是&#xff0c;它们通常采用负抽样的方法从网络…

Java 函数优雅之道

导读 随着软件项目代码的日积月累&#xff0c;系统维护成本变得越来越高&#xff0c;是所有软件团队面临的共同问题。持续地优化代码&#xff0c;提高代码的质量&#xff0c;是提升系统生命力的有效手段之一。软件系统思维有句话“Less coding, more thinking&#xff08;少编…

剖析疫情环境下的国内云市场:大势所趋,正是大展拳脚的好时机!

作者 | 马超责编 | Carol封图 | CSDN 付费下载于视觉中国4月29日&#xff0c;谷歌的母公司Alphabet正式发布了2020年第一季度财报&#xff0c;报告显示&#xff0c;Alphabet比去年同期的363.39亿美元增长13%&#xff0c;不计入汇率变动的影响为同比增长15%&#xff1b;在业绩公…

开源考试系统 -微信小程序开发

文章目录一、小程序前置准备1. 创建小程序2. 下载小程序开发工具二、小程序后端部署2.1. 配置修改2.2. 启动redis2.3. 启动后端项目三、小程序前端部署3.1. 微信小程序打开项目3.2. 学生端登录页面3.3. admin端登录一、小程序前置准备 1. 创建小程序 去腾讯小程序官网注册账号…

linux-centos7 常用的基本命令--文件内容查看、硬链接和软链接

一、文件内容查看 1、cat &#xff08;由第一行开始显示文件内容&#xff09; cat [-AbeEnstTuv] [--help] [--version] fileName参数说明&#xff1a; -n 或 --number&#xff1a;由 1 开始对所有输出的行数编号。-b 或 --number-nonblank&#xff1a;和 -n 相似&#xff0…

共享学习:蚂蚁金服数据孤岛解决方案

如果有A、B、C三位同学&#xff0c;他们各自手上有10、15、20块钱&#xff0c;这时需要在相互不知道对方有多少钱的情况下&#xff0c;不借助力第三方来计算三个人一共有多少钱。请问这时候&#xff0c;我们如何实现呢&#xff1f;——这&#xff0c;就是最经典的秘密共享场景。…

学之思开源考试系统 - 使用手册

文章目录一、前期准备1. 启动后端2. 启动前台管理员端3. 启动前台学员端二、用户添加2.1. 学生添加2.2. 管理员添加三、题目管理3.1. 添加学科2.2. 单选题添加2.3. 多选题添加2.4. 判断题添加2.5. 填空题添加2.6. 简答题添加四、试卷管理4.1. 固定试卷添加4.2. 时段试卷添加4.3…

看似简单的搜索引擎,原来背后的数据结构和算法这么复杂?

来源 | 码海封图 | CSDN 付费下载于视觉中国前言我们每天都在用 Google, 百度这些搜索引擎&#xff0c;那大家有没想过搜索引擎是如何实现的呢&#xff0c;看似简单的搜索其实技术细节非常复杂&#xff0c;说搜索引擎是 IT 皇冠上的明珠也不为过&#xff0c;今天我们来就来简单…

阿里巴巴在应用性能测试场景设计和实现上的实践

本文是《Performance Test Together》&#xff08;简称PTT&#xff09;系列专题分享的第5期&#xff0c;该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解&#xff0c;以帮助大家构建完整的性能压测的理论体系&…

linux-centos7 常用的基本命令--Vim编辑器

一、Vim编辑器 1、什么是 vim&#xff1f; Vim通过一些插件可以实现和IDE一样的功能&#xff01; Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 简单的来说&#xff0c; vi 是老式的字处理器…

mysql8修改密码

mysql -u root -p # 密码 USE mysql # 修改密码 ALTER USER rootlocalhost IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 新密码; flush privileges; mysql -u test -p输入新密码