知识库使用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);
知识库使用VIEW视图实现内部用户、组关联关系和flowable内置表打通相关推荐
- MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引(一)
阅读目录 本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 一.视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可. 如果要频繁使用一张虚拟表,可以不用重复查询 视 ...
- 管理计算机域内置账户改为用户账户,“管理计算机(域)的内置帐户”我给它改了名...
在Windows XP中,Administrator帐户是终极管理员,如果你创建了其他管理员帐户,那么该帐户就会从欢迎屏幕上被隐藏.这里需要注意的是,仅仅是从欢迎屏幕上被隐藏,该帐户仍然存在. 如果你 ...
- MySQL 之视图、 触发器、事务、存储过程、内置函数、流程控制、索引(二)
继上文 --------------------------------------------------------------------注:如果你对python感兴趣,我这有个学习Python ...
- 组策略 计算机 用户账户控制,Windows 10 (用户帐户控制组策略和注册表) - Microsoft 365 Security | Microsoft Docs...
用户帐户控制组策略和注册表项设置 04/19/2017 本文内容 适用范围 Windows 10 Windows Server 2016 组策略设置 UAC 管理中心可以配置 10 个组策略 (用户帐 ...
- dmv 统计数据库io_使用内置功能和动态管理视图(DMV)发现特定于数据库的信息
dmv 统计数据库io 介绍 (Introduction) In the last two articles on dynamic management views in SQL Server, Di ...
- 数据库VIEW(视图)
视图是基于 SQL 语句的结果集的可视化的表. 视图包括行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段. 我们能够向视图加入 SQL 函数.WHERE 以及 JOI ...
- 查看mysql view作用_Mysql中View视图的作用
浙江PHP博客分享关于Mysql中使用View视图的作用.很多小伙伴知道视图的作用,却不知道为什么要使用视图以及视图的一些好处是什么,下面浙江一点PHP将详细阐述关于视图的用法以及作用. 作用一: 提 ...
- pythonsqlite视图_SQLite VIEW/视图
视图是没有超过一个SQLite语句存储在数据库相关的名称.视图实际上是一个预定义的SQLite查询的形式的组合物中的一个表. 从一个或多个表,视图可以包含一个表的所有行或选定行.可以从一个或多个表,这 ...
- MySQL(7)数据库中的高级(进阶)语句:VIEW视图、联集和常见计算
文章目录 一.VIEW(视图) 1.1 概念 1.2 创建.查看和删除视图 二.联集 2.1 UNION 2.2 UNION ALL 三.交集值 3.1 两表没有单独重复的行,并且确实有交集的时候用 ...
最新文章
- 【转载】Python的运行原理(编译过程及执行原理)
- Dockerfile 部署Djano项目
- TypeScript—语法简介
- JTA 深度历险 - 原理与实现
- 不删除旧版本java_Linux 卸载旧版jdk 并安装新版jdk(转)
- mysql 获取操作系统信息_php获取服务器操作系统相关信息的方法
- python函数定义及调用-Python函数的基本定义和调用以及内置函数
- linux nvme 驱动 版本,Linux 上的 NVMe
- 单独编译一个内核模块的方法
- python赋值与c语言区别,运算符-赋值运算符和逻辑运算符
- 数学分析:Taylor多项式
- 碎碎念No.03 我这个程序员终于去看了心理医生做了心理咨询
- MATLAB机器人工具箱(二)机器人模型建立
- java short 转char_byte,short,char的类型转换
- 用计算机写作文的好处,第7课 用计算机写作文教案
- turtle库画超立方体 难度1
- c语言k1什么意思啊,一张图告诉你斐讯路由器K1S、K2,K2C的区别-路由器交流
- Android手电筒案例
- 纯硬件无人直播手机,不需要电脑,不需要虚拟摄像头,可人工干预、可粉丝互动,半无人直播
- php显示汉字,在php中如何显示汉字?