文章目录

  • 一、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);

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

  1. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引(一)

    阅读目录 本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 一.视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可. 如果要频繁使用一张虚拟表,可以不用重复查询 视 ...

  2. 管理计算机域内置账户改为用户账户,“管理计算机(域)的内置帐户”我给它改了名...

    在Windows XP中,Administrator帐户是终极管理员,如果你创建了其他管理员帐户,那么该帐户就会从欢迎屏幕上被隐藏.这里需要注意的是,仅仅是从欢迎屏幕上被隐藏,该帐户仍然存在. 如果你 ...

  3. MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引(二)

    继上文 --------------------------------------------------------------------注:如果你对python感兴趣,我这有个学习Python ...

  4. 组策略 计算机 用户账户控制,Windows 10 (用户帐户控制组策略和注册表) - Microsoft 365 Security | Microsoft Docs...

    用户帐户控制组策略和注册表项设置 04/19/2017 本文内容 适用范围 Windows 10 Windows Server 2016 组策略设置 UAC 管理中心可以配置 10 个组策略 (用户帐 ...

  5. dmv 统计数据库io_使用内置功能和动态管理视图(DMV)发现特定于数据库的信息

    dmv 统计数据库io 介绍 (Introduction) In the last two articles on dynamic management views in SQL Server, Di ...

  6. 数据库VIEW(视图)

    视图是基于 SQL 语句的结果集的可视化的表. 视图包括行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 我们能够向视图加入 SQL 函数.WHERE 以及 JOI ...

  7. 查看mysql view作用_Mysql中View视图的作用

    浙江PHP博客分享关于Mysql中使用View视图的作用.很多小伙伴知道视图的作用,却不知道为什么要使用视图以及视图的一些好处是什么,下面浙江一点PHP将详细阐述关于视图的用法以及作用. 作用一: 提 ...

  8. pythonsqlite视图_SQLite VIEW/视图

    视图是没有超过一个SQLite语句存储在数据库相关的名称.视图实际上是一个预定义的SQLite查询的形式的组合物中的一个表. 从一个或多个表,视图可以包含一个表的所有行或选定行.可以从一个或多个表,这 ...

  9. MySQL(7)数据库中的高级(进阶)语句:VIEW视图、联集和常见计算

    文章目录 一.VIEW(视图) 1.1 概念 1.2 创建.查看和删除视图 二.联集 2.1 UNION 2.2 UNION ALL 三.交集值 3.1 两表没有单独重复的行,并且确实有交集的时候用 ...

最新文章

  1. 【转载】Python的运行原理(编译过程及执行原理)
  2. Dockerfile 部署Djano项目
  3. TypeScript—语法简介
  4. JTA 深度历险 - 原理与实现
  5. 不删除旧版本java_Linux 卸载旧版jdk 并安装新版jdk(转)
  6. mysql 获取操作系统信息_php获取服务器操作系统相关信息的方法
  7. python函数定义及调用-Python函数的基本定义和调用以及内置函数
  8. linux nvme 驱动 版本,Linux 上的 NVMe
  9. 单独编译一个内核模块的方法
  10. python赋值与c语言区别,运算符-赋值运算符和逻辑运算符
  11. 数学分析:Taylor多项式
  12. 碎碎念No.03 我这个程序员终于去看了心理医生做了心理咨询
  13. MATLAB机器人工具箱(二)机器人模型建立
  14. java short 转char_byte,short,char的类型转换
  15. 用计算机写作文的好处,第7课 用计算机写作文教案
  16. turtle库画超立方体 难度1
  17. c语言k1什么意思啊,一张图告诉你斐讯路由器K1S、K2,K2C的区别-路由器交流
  18. Android手电筒案例
  19. 纯硬件无人直播手机,不需要电脑,不需要虚拟摄像头,可人工干预、可粉丝互动,半无人直播
  20. php显示汉字,在php中如何显示汉字?

热门文章

  1. 首次!华人获世界科学奖,其海洋蓝色能源技术或解决世界能源需求
  2. 睡眠音频分割及识别问题(八)--数据采集
  3. Linux下压缩包生成与解压命令以及进度
  4. java中Date和DateFormat、SimpleDateFormat类
  5. c++11/14新特性学习
  6. 学信网:研究生云复试平台快速搭建上线
  7. 揭晓阿里云神龙团队拿下TPCx-BB排名第一的背后技术
  8. HMS数据库设置和优化
  9. 代理网关设计与实现(基于NETTY)
  10. Swift 在 GAIA 平台云端一体化的探索