RBAC权限管理模型中的部门角色绑定方案优化
部门角色绑定场景分析
在RBAC权限管理模型中,部门与角色的绑定是一个常见需求。根据不同的业务场景,我整理了以下几种解决方案:
基础场景:用户单部门关联
方案一:部门直接绑定角色(简单实现)
-
适用场景:员工严格属于单一部门且部门角色单一
-
实现方式:
- 在部门表中添加
role_id
字段 - 用户通过部门关联获取角色
- 在部门表中添加
-
优点:结构简单,查询高效
-
缺点:灵活性差,无法处理多角色需求
方案二:用户额外角色补充
-
适用场景:部门已有基础角色,但个别用户需要额外权限
-
实现方式:
- 保留部门角色绑定
- 同时允许用户直接关联多个角色
-
优点:兼顾基础权限和特殊需求
-
缺点:权限管理复杂度增加
进阶场景:用户多部门关联
方案三:部门-角色关系表
-
核心表结构:
sqlCREATE TABLE sys_dept_role ( id BIGINT PRIMARY KEY, dept_id BIGINT NOT NULL, role_id BIGINT NOT NULL, is_primary BOOLEAN DEFAULT FALSE, UNIQUE(dept_id, role_id) );
-
功能特点:
- 支持部门关联多个角色
- 通过
is_primary
标记主部门角色 - 用户通过多部门关联获取多角色
-
查询逻辑:
scss// 获取用户所有角色 List<Role> getRolesByUser(Long userId) { // 1. 获取用户关联的所有部门 List<Dept> depts = userDeptMapper.selectByUserId(userId); // 2. 获取这些部门关联的所有角色 return deptRoleMapper.selectByDeptIds( depts.stream().map(Dept::getId).collect(Collectors.toList()) ); }
数据权限控制场景
方案四:角色数据范围控制
-
核心表结构:
sqlCREATE TABLE sys_role ( ... data_scope TINYINT NOT NULL COMMENT '1=全部,2=部门及以下,3=本部门,4=仅本人,5=自定义' ); CREATE TABLE sys_role_data_scope ( role_id BIGINT NOT NULL, dept_id BIGINT NOT NULL, PRIMARY KEY(role_id, dept_id) );
-
权限处理逻辑:
javaDataScope getDataScope(Long userId, Long roleId) { Role role = roleMapper.selectById(roleId); switch(role.getDataScope()) { case 1: // 全部数据 return new DataScope(true); case 2: // 本部门及以下 List<Long> deptIds = getDeptTree(userDeptMapper.getMainDept(userId)); return new DataScope(deptIds); case 3: // 本部门 return new DataScope(userDeptMapper.getMainDept(userId)); case 5: // 自定义 return new DataScope(roleDataScopeMapper.selectByRoleId(roleId)); default: // 仅本人 return new DataScope(userId); } }
复杂组织架构场景
方案五:部门-岗位-角色三级关联
-
表结构设计:
sqlCREATE TABLE sys_post ( id BIGINT PRIMARY KEY, dept_id BIGINT NOT NULL, name VARCHAR(50) NOT NULL ); CREATE TABLE sys_post_role ( post_id BIGINT NOT NULL, role_id BIGINT NOT NULL, PRIMARY KEY(post_id, role_id) ); CREATE TABLE sys_user_post ( user_id BIGINT NOT NULL, post_id BIGINT NOT NULL, PRIMARY KEY(user_id, post_id) );
-
权限获取流程:
- 用户 → 岗位(通过user_post表)
- 岗位 → 部门(岗位表的dept_id)
- 岗位 → 角色(通过post_role表)
表结构参考
SQL
/*
Navicat Premium Dump SQL
Source Server : auth_test
Source Server Type : MySQL
Source Server Version : 80036 (8.0.36)
Source Host : rm-bp12z6hlv46vi6g8mro.mysql.rds.aliyuncs.com:3306
Source Schema : test_auth
Target Server Type : MySQL
Target Server Version : 80036 (8.0.36)
File Encoding : 65001
Date: 14/08/2025 19:42:40
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_auth_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_auth_log`;
CREATE TABLE `sys_auth_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`event_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '事件类型(GRANTED=授权成功,DENIED=授权拒绝)',
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
`user_id` bigint NULL DEFAULT NULL COMMENT '用户ID',
`request_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求IP',
`request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '请求方法(GET,POST等)',
`request_uri` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求URI',
`class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '类名',
`method_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '方法名',
`method_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '方法参数(JSON格式)',
`required_authority` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '所需权限表达式',
`user_authorities` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '用户拥有的权限(JSON格式)',
`decision_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '决策原因',
`exception_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '异常信息',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_username`(`username` ASC) USING BTREE,
INDEX `idx_event_type`(`event_type` ASC) USING BTREE,
INDEX `idx_class_method`(`class_name` ASC, `method_name` ASC) USING BTREE,
INDEX `idx_user_event_time`(`user_id` ASC, `event_type` ASC, `create_time` ASC) USING BTREE,
INDEX `fk_dept_update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1946596447059324931 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统授权日志表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`id` bigint NOT NULL COMMENT '部门ID',
`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父部门ID(0表示顶级部门)',
`dept_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '部门编码(唯一标识)',
`dept_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '部门名称',
`dept_level` int NOT NULL DEFAULT 1 COMMENT '部门层级(从1开始)',
`dept_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '部门路径(存储所有父级ID,用逗号分隔)',
`order_num` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态(0=停用 1=启用)',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_dept_code`(`dept_code` ASC) USING BTREE COMMENT '部门编码唯一索引',
INDEX `idx_dept_name`(`dept_name` ASC) USING BTREE COMMENT '部门名称索引',
INDEX `idx_parent_id`(`parent_id` ASC) USING BTREE COMMENT '父部门ID索引',
INDEX `idx_dept_level`(`dept_level` ASC) USING BTREE COMMENT '部门层级索引',
INDEX `idx_dept_path`(`dept_path`(255) ASC) USING BTREE COMMENT '部门路径索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_composite_search`(`dept_name` ASC, `status` ASC, `dept_level` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_order_num`(`order_num` ASC) USING BTREE COMMENT '排序序号索引',
INDEX `create_user`(`create_user` ASC) USING BTREE,
INDEX `update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `sys_dept_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_dept_ibfk_2` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统部门' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_dept_manager
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept_manager`;
CREATE TABLE `sys_dept_manager` (
`id` bigint NOT NULL AUTO_INCREMENT,
`dept_id` bigint NOT NULL COMMENT '部门ID',
`user_id` bigint NOT NULL COMMENT '管理者用户ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_dept_user`(`dept_id` ASC, `user_id` ASC) USING BTREE COMMENT '部门-用户唯一组合索引',
INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '用户ID索引',
INDEX `fk_dm_dept`(`dept_id` ASC) USING BTREE,
INDEX `fk_dm_user`(`user_id` ASC) USING BTREE,
INDEX `fk_dm_create_user`(`create_user` ASC) USING BTREE,
INDEX `fk_dm_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_dm_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_dm_dept` FOREIGN KEY (`dept_id`) REFERENCES `sys_dept` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_dm_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_dm_user` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1951599813871255554 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '部门管理者关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典ID',
`dict_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典类型',
`dict_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典编码',
`dict_value` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典值',
`dict_label` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典标签',
`css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '样式类名(前端显示使用)',
`list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '表格回显样式',
`is_default` tinyint(1) NULL DEFAULT 0 COMMENT '是否默认(0=否 1=是)',
`order_num` int NOT NULL DEFAULT 0 COMMENT '排序序号',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态(0=停用 1=启用)',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注说明',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_type_code`(`dict_type` ASC, `dict_code` ASC) USING BTREE COMMENT '类型和编码唯一索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_dict_type`(`dict_type` ASC) USING BTREE COMMENT '字典类型索引',
INDEX `idx_dict_code`(`dict_code` ASC) USING BTREE COMMENT '字典编码索引',
INDEX `idx_is_default`(`is_default` ASC) USING BTREE COMMENT '默认值索引',
INDEX `idx_composite_search`(`dict_type` ASC, `dict_label` ASC, `status` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_order_num`(`order_num` ASC) USING BTREE COMMENT '排序序号索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_d_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_dict_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统数据字典' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_email_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_email_config`;
CREATE TABLE `sys_email_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID(主键)',
`config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置名称',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '发件邮箱',
`username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '发件人名称',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮箱密码/授权码',
`host` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'SMTP服务器地址',
`port` int NOT NULL COMMENT 'SMTP端口',
`protocol` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'smtp' COMMENT '协议类型(smtp/pop3/imap)',
`ssl_enable` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用SSL(0=否,1=是)',
`is_default` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否默认配置(0=否,1=是)',
`test_status` tinyint NULL DEFAULT NULL COMMENT '测试状态(0=失败,1=成功)',
`test_time` datetime NULL DEFAULT NULL COMMENT '最后测试时间',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_email`(`email` ASC) USING BTREE COMMENT '邮箱唯一索引',
UNIQUE INDEX `uk_config_name`(`config_name` ASC) USING BTREE COMMENT '配置名称唯一索引',
INDEX `idx_is_default`(`is_default` ASC) USING BTREE COMMENT '默认配置索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_ec_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统邮件服务器配置' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_email_template
-- ----------------------------
DROP TABLE IF EXISTS `sys_email_template`;
CREATE TABLE `sys_email_template` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '模板ID(主键)',
`template_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '模板编码(唯一)',
`template_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '模板名称',
`email_config_id` bigint NULL DEFAULT NULL COMMENT '关联邮件配置ID',
`subject` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮件主题',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮件内容(支持HTML)',
`template_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '模板类型',
`cc_list` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '抄送列表(多个用逗号分隔)',
`bcc_list` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密送列表(多个用逗号分隔)',
`is_default` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否默认模板(0=否,1=是)',
`params_config` json NULL COMMENT '模板参数配置',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_template_code`(`template_code` ASC) USING BTREE COMMENT '模板编码唯一索引',
UNIQUE INDEX `uk_template_name`(`template_name` ASC) USING BTREE COMMENT '模板名称唯一索引',
INDEX `idx_email_config_id`(`email_config_id` ASC) USING BTREE COMMENT '邮件配置ID索引',
INDEX `idx_template_type`(`template_type` ASC) USING BTREE COMMENT '模板类型索引',
INDEX `idx_is_default`(`is_default` ASC) USING BTREE COMMENT '默认模板索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_et_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_email_template_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统邮件模板' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_file
-- ----------------------------
DROP TABLE IF EXISTS `sys_file`;
CREATE TABLE `sys_file` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '文件ID(主键)',
`file_uid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件唯一标识(可用于外部引用)',
`original_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '原始文件名',
`storage_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '存储文件名',
`file_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件存储路径(相对路径)',
`full_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '完整访问URL',
`file_size` bigint NOT NULL COMMENT '文件大小(字节)',
`file_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件MIME类型',
`file_extension` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件扩展名',
`file_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文件哈希值(用于去重)',
`download_count` int NOT NULL DEFAULT 0 COMMENT '下载次数',
`storage_type` tinyint NOT NULL DEFAULT 1 COMMENT '存储类型(1=本地,2=OSS,3=七牛云,4=阿里云,5=腾讯云)',
`file_status` tinyint NOT NULL DEFAULT 1 COMMENT '文件状态(0=临时,1=正式,2=归档,3=已删除)',
`business_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '业务类型(用于分类)',
`business_id` bigint NULL DEFAULT NULL COMMENT '关联业务ID',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_file_uid`(`file_uid` ASC) USING BTREE COMMENT '文件唯一标识索引',
UNIQUE INDEX `uk_file_hash`(`file_hash` ASC) USING BTREE COMMENT '文件哈希值索引(用于去重)',
INDEX `idx_original_name`(`original_name`(100) ASC) USING BTREE COMMENT '原始文件名索引',
INDEX `idx_storage_name`(`storage_name` ASC) USING BTREE COMMENT '存储文件名索引',
INDEX `idx_file_type`(`file_type` ASC) USING BTREE COMMENT '文件类型索引',
INDEX `idx_file_extension`(`file_extension` ASC) USING BTREE COMMENT '文件扩展名索引',
INDEX `idx_business`(`business_type` ASC, `business_id` ASC) USING BTREE COMMENT '业务关联索引',
INDEX `idx_file_status`(`file_status` ASC) USING BTREE COMMENT '文件状态索引',
INDEX `idx_storage_type`(`storage_type` ASC) USING BTREE COMMENT '存储类型索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_composite_search`(`original_name` ASC, `file_type` ASC, `file_status` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_f_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_file_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统文件存储' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_login_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_login_log`;
CREATE TABLE `sys_login_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID(主键)',
`user_id` bigint NULL DEFAULT NULL COMMENT '用户ID',
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名',
`login_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '登录类型(account=账号,phone=手机,email=邮箱)',
`login_result` tinyint NOT NULL COMMENT '登录结果(0=失败,1=成功)',
`ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '登录IP',
`ip_region` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'IP归属地',
`user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户代理',
`device_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '设备类型',
`os_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作系统',
`browser_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '浏览器类型',
`error_msg` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '错误信息',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '用户ID索引',
INDEX `idx_username`(`username` ASC) USING BTREE COMMENT '用户名索引',
INDEX `idx_login_result`(`login_result` ASC) USING BTREE COMMENT '登录结果索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_ip_address`(`ip_address` ASC) USING BTREE COMMENT 'IP地址索引',
INDEX `idx_login_type`(`login_type` ASC) USING BTREE COMMENT '登录类型索引',
INDEX `create_user`(`create_user` ASC) USING BTREE COMMENT '创建用户',
INDEX `update_user`(`update_user` ASC) USING BTREE COMMENT '更新用户',
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统用户登录日志' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID(主键)',
`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父菜单ID(0表示一级菜单)',
`menu_type` tinyint NOT NULL DEFAULT 0 COMMENT '菜单类型(0=菜单,1=iframe,2=外链)',
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '路由路径(唯一)',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '路由名称(必须唯一)',
`redirect` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '路由重定向',
`component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '组件路径',
`title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单标题(显示用)',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单图标',
`show_link` tinyint(1) NULL DEFAULT 1 COMMENT '是否在菜单中显示(0=否,1=是)',
`menu_rank` int NULL DEFAULT 99 COMMENT '菜单排序(值越高排的越后)',
`extra_icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单名称右侧的额外图标',
`show_parent` tinyint(1) NULL DEFAULT 0 COMMENT '是否显示父级菜单(0=否,1=是)',
`roles` json NULL COMMENT '页面级别权限设置(角色数组)',
`auths` json NULL COMMENT '按钮级别权限设置(权限数组)',
`keep_alive` tinyint(1) NULL DEFAULT 0 COMMENT '是否缓存该路由页面(0=否,1=是)',
`frame_src` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '需要内嵌的iframe链接地址',
`frame_loading` tinyint(1) NULL DEFAULT 1 COMMENT 'iframe页面是否开启首次加载动画(0=否,1=是)',
`transition_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '页面动画(vue内置transitions动画)',
`enter_transition` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '页面进场动画(animate.css动画名)',
`leave_transition` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '页面离场动画(animate.css动画名)',
`hidden_tag` tinyint(1) NULL DEFAULT 0 COMMENT '是否禁止添加到标签页(0=否,1=是)',
`dynamic_level` int NULL DEFAULT NULL COMMENT '标签页显示的最大数量',
`active_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '指定激活菜单的path',
`fixed_tag` tinyint(1) NULL DEFAULT 0 COMMENT '是否固定标签(0=否,1=是)',
`status` tinyint NULL DEFAULT 1 COMMENT '状态(0=禁用,1=启用)',
`extra_meta` json NULL COMMENT '路由元数据(扩展用)',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注信息',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_path`(`path` ASC) USING BTREE COMMENT '路由路径唯一索引',
UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE COMMENT '路由名称唯一索引',
INDEX `idx_parent_id`(`parent_id` ASC) USING BTREE COMMENT '父菜单ID索引',
INDEX `idx_menu_type`(`menu_type` ASC) USING BTREE COMMENT '菜单类型索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_show_link`(`show_link` ASC) USING BTREE COMMENT '是否显示索引',
INDEX `idx_keep_alive`(`keep_alive` ASC) USING BTREE COMMENT '缓存路由索引',
INDEX `idx_hidden_tag`(`hidden_tag` ASC) USING BTREE COMMENT '隐藏标签索引',
INDEX `idx_fixed_tag`(`fixed_tag` ASC) USING BTREE COMMENT '固定标签索引',
INDEX `idx_composite_search`(`name` ASC, `title` ASC, `status` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_menu_rank`(`menu_rank` ASC) USING BTREE COMMENT '排序索引',
CONSTRAINT `fk_menu_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_menu_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1954934345018699779 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单权限表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_menu_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu_role`;
CREATE TABLE `sys_menu_role` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联ID(主键,自增)',
`role_id` bigint NOT NULL COMMENT '角色ID',
`menu_id` bigint NOT NULL COMMENT '菜单ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_role_menu`(`role_id` ASC, `menu_id` ASC) USING BTREE COMMENT '角色和菜单唯一组合索引',
INDEX `idx_menu_id`(`menu_id` ASC) USING BTREE COMMENT '菜单ID索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `fk_mr_create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_mr_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_mr_menu_id` FOREIGN KEY (`menu_id`) REFERENCES `sys_menu` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_mr_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_mr_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1954916816607064066 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统菜单角色关联' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_operation_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_operation_log`;
CREATE TABLE `sys_operation_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志ID(主键)',
`module` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作模块',
`operation_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '操作类型',
`operation_desc` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作描述',
`request_method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求方法',
`request_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求URL',
`request_params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '请求参数',
`response_result` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '响应结果',
`user_id` bigint NULL DEFAULT NULL COMMENT '操作用户ID',
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作用户名',
`ip_address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作IP',
`ip_region` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'IP归属地',
`user_agent` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户代理',
`status` tinyint NULL DEFAULT 1 COMMENT '操作状态(0=失败,1=成功)',
`error_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '错误信息',
`execute_time` bigint NULL DEFAULT NULL COMMENT '执行时长(毫秒)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_id`(`user_id` ASC) USING BTREE COMMENT '用户ID索引',
INDEX `idx_username`(`username` ASC) USING BTREE COMMENT '用户名索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_ip_address`(`ip_address` ASC) USING BTREE COMMENT 'IP地址索引',
INDEX `idx_module_type_time`(`module` ASC, `operation_type` ASC, `create_time` ASC) USING BTREE,
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统操作日志' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_password_history
-- ----------------------------
DROP TABLE IF EXISTS `sys_password_history`;
CREATE TABLE `sys_password_history` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`password_hash` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`salt` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`change_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`change_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_user_time`(`user_id` ASC, `change_time` ASC) USING BTREE,
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_ph_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_ph_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户密码修改历史' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for sys_permission
-- ----------------------------
DROP TABLE IF EXISTS `sys_permission`;
CREATE TABLE `sys_permission` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '权限ID(主键,自增)',
`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父权限ID(0表示一级权限)',
`permission_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '权限编码(唯一标识)',
`permission_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '权限名称',
`permission_type` tinyint NOT NULL DEFAULT 1 COMMENT '权限类型(0=按钮权限,1=API权限)',
`url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求路径(支持Ant风格)',
`method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求方法(GET,POST,PUT,DELETE等)',
`permission_level` int NOT NULL DEFAULT 1 COMMENT '权限层级(从1开始)',
`permission_path` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '权限路径(存储所有父级ID,用逗号分隔)',
`order_num` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态(0=禁用,1=启用)',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注说明',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_permission_code`(`permission_code` ASC) USING BTREE COMMENT '权限编码唯一索引',
INDEX `idx_parent_id`(`parent_id` ASC) USING BTREE COMMENT '父权限ID索引',
INDEX `idx_permission_type`(`permission_type` ASC) USING BTREE COMMENT '权限类型索引',
INDEX `idx_url_method`(`url`(255) ASC, `method` ASC) USING BTREE COMMENT '请求路径和方法索引',
INDEX `idx_permission_level`(`permission_level` ASC) USING BTREE COMMENT '权限层级索引',
INDEX `idx_permission_path`(`permission_path`(255) ASC) USING BTREE COMMENT '权限路径索引',
INDEX `idx_order_num`(`order_num` ASC) USING BTREE COMMENT '排序序号索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_composite_search`(`permission_name` ASC, `permission_code` ASC, `status` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_p_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_permission_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1950534728696348675 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统权限资源' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_post`;
CREATE TABLE `sys_post` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
`post_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '岗位名称',
`post_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '岗位编码',
`dept_id` bigint NOT NULL COMMENT '所属部门ID',
`position_level` tinyint NULL DEFAULT 1 COMMENT '岗位级别',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态(0=禁用,1=启用)',
`order_num` int NOT NULL DEFAULT 0 COMMENT '排序字段',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_name_code`(`post_name` ASC, `post_code` ASC) USING BTREE,
UNIQUE INDEX `uk_dept_code`(`dept_id` ASC, `post_code` ASC) USING BTREE COMMENT '部门下岗位编码唯一',
INDEX `idx_dept`(`dept_id` ASC) USING BTREE COMMENT '部门ID索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_order_num`(`order_num` ASC) USING BTREE COMMENT '排序字段索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `create_user`(`create_user` ASC) USING BTREE,
INDEX `update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `sys_post_ibfk_1` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_post_ibfk_2` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_post_ibfk_3` FOREIGN KEY (`dept_id`) REFERENCES `sys_dept` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1951594476485087234 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '岗位表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID(主键,自增)',
`role_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色编码(唯一标识)',
`role_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色名称',
`role_type` tinyint NOT NULL DEFAULT 1 COMMENT '角色类型(1=系统角色,2=业务角色,3=自定义)',
`data_scope` tinyint NOT NULL DEFAULT 1 COMMENT '数据权限范围(1=全部数据,2=本部门及以下,3=本部门,4=仅本人,5=自定义)',
`order_num` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态(0=禁用,1=启用)',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注说明',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_role_code`(`role_code` ASC) USING BTREE COMMENT '角色编码唯一索引',
INDEX `idx_role_name`(`role_name` ASC) USING BTREE COMMENT '角色名称索引',
INDEX `idx_role_type`(`role_type` ASC) USING BTREE COMMENT '角色类型索引',
INDEX `idx_data_scope`(`data_scope` ASC) USING BTREE COMMENT '数据权限范围索引',
INDEX `idx_order_num`(`order_num` ASC) USING BTREE COMMENT '排序序号索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_composite_search`(`role_name` ASC, `role_code` ASC, `status` ASC) USING BTREE COMMENT '综合查询索引',
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_r_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_r_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1954435021935554740 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统角色信息' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_role_data_scope
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_data_scope`;
CREATE TABLE `sys_role_data_scope` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
`dept_id` bigint NOT NULL COMMENT '部门ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_role_dept`(`role_id` ASC, `dept_id` ASC) USING BTREE COMMENT '角色和部门唯一组合索引',
INDEX `idx_dept_id`(`dept_id` ASC) USING BTREE COMMENT '部门ID索引',
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_rds_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_rds_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_rds_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统角色数据权限范围' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_role_permission
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_permission`;
CREATE TABLE `sys_role_permission` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联ID(主键,自增)',
`role_id` bigint NOT NULL COMMENT '角色ID',
`permission_id` bigint NOT NULL COMMENT '权限ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_role_permission`(`role_id` ASC, `permission_id` ASC) USING BTREE COMMENT '角色和权限唯一组合索引',
INDEX `idx_permission_id`(`permission_id` ASC) USING BTREE COMMENT '权限ID索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `fk_rp_create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_rp_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_rp_permission_id` FOREIGN KEY (`permission_id`) REFERENCES `sys_permission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_rp_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_rp_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1954420095670153225 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统角色权限关联' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID(主键)',
`username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名(唯一)',
`nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户昵称',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '邮箱(唯一)',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '加密后的密码',
`avatar` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '头像URL',
`gender` tinyint UNSIGNED NOT NULL DEFAULT 0,
`birthday` date NULL DEFAULT NULL COMMENT '出生日期',
`introduction` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '个人简介',
`last_login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最后登录IP',
`last_login_region` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最后登录地区',
`last_login_time` datetime NULL DEFAULT NULL COMMENT '最后登录时间',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态(0=禁用,1=正常,2=锁定)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_username`(`username` ASC) USING BTREE COMMENT '用户名唯一索引',
UNIQUE INDEX `uk_email`(`email` ASC) USING BTREE COMMENT '邮箱唯一索引',
UNIQUE INDEX `uk_phone`(`phone` ASC) USING BTREE COMMENT '手机号唯一索引',
INDEX `idx_nickname`(`nickname` ASC) USING BTREE COMMENT '昵称索引',
INDEX `idx_status`(`status` ASC) USING BTREE COMMENT '状态索引',
INDEX `idx_create_time`(`create_time` ASC) USING BTREE COMMENT '创建时间索引',
INDEX `idx_last_login_time`(`last_login_time` ASC) USING BTREE COMMENT '最后登录时间索引',
INDEX `idx_dept_status`(`status` ASC) USING BTREE,
INDEX `idx_post_status`(`status` ASC) USING BTREE,
INDEX `fk_user_create_user`(`create_user` ASC) USING BTREE,
INDEX `fk_user_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_user_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_user_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1948985046253764610 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统用户信息' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_user_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_dept`;
CREATE TABLE `sys_user_dept` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联ID(主键)',
`user_id` bigint NOT NULL COMMENT '用户ID',
`dept_id` bigint NOT NULL COMMENT '部门ID',
`is_primary` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否主部门(0=否,1=是)',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NULL DEFAULT NULL COMMENT '逻辑删除(0=未删除,1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_user_dept`(`user_id` ASC, `dept_id` ASC) USING BTREE COMMENT '用户和部门唯一组合索引',
INDEX `idx_dept_id`(`dept_id` ASC) USING BTREE COMMENT '部门ID索引',
INDEX `idx_is_primary`(`is_primary` ASC) USING BTREE COMMENT '主部门索引',
INDEX `update_user`(`update_user` ASC) USING BTREE,
INDEX `create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_ud_dept_id` FOREIGN KEY (`dept_id`) REFERENCES `sys_dept` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_ud_user_id` FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `sys_user_dept_ibfk_1` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `sys_user_dept_ibfk_2` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1955669155785854979 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统用户部门关联' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for sys_user_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_post`;
CREATE TABLE `sys_user_post` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联ID(主键)',
`user_id` bigint NOT NULL COMMENT '用户ID',
`post_id` bigint NOT NULL COMMENT '岗位ID',
`is_primary` tinyint(1) NULL DEFAULT 0 COMMENT '是否主岗位',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人ID',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_user_post`(`user_id` ASC, `post_id` ASC) USING BTREE COMMENT '用户和岗位唯一组合索引',
INDEX `idx_create_user`(`create_user` ASC) USING BTREE,
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
CONSTRAINT `fk_up_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT `fk_up_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统用户岗位关联' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联ID(主键,自增)',
`user_id` bigint NOT NULL COMMENT '用户ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_user` bigint NOT NULL COMMENT '创建人ID',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '更新人ID',
`is_deleted` tinyint(1) UNSIGNED ZEROFILL NOT NULL DEFAULT 0 COMMENT '删除标志(0=未删除 1=已删除)',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_user_role`(`user_id` ASC, `role_id` ASC) USING BTREE COMMENT '用户和角色唯一组合索引',
INDEX `idx_role_id`(`role_id` ASC) USING BTREE COMMENT '角色ID索引',
INDEX `idx_update_user`(`update_user` ASC) USING BTREE,
INDEX `fk_ur_create_user`(`create_user` ASC) USING BTREE,
CONSTRAINT `fk_ur_create_user` FOREIGN KEY (`create_user`) REFERENCES `sys_user` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_ur_role_id` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_ur_update_user` FOREIGN KEY (`update_user`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 1955490130643668999 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '系统用户角色关联' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- View structure for v_menu_role_permission
-- ----------------------------
DROP VIEW IF EXISTS `v_menu_role_permission`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_menu_role_permission` AS select `m`.`id` AS `menu_id`,`m`.`parent_id` AS `parent_id`,`m`.`menu_type` AS `menu_type`,`m`.`path` AS `path`,`m`.`name` AS `name`,`m`.`redirect` AS `redirect`,`m`.`component` AS `component`,`m`.`title` AS `title`,`m`.`icon` AS `icon`,`m`.`show_link` AS `show_link`,`m`.`menu_rank` AS `menu_rank`,`m`.`extra_icon` AS `extra_icon`,`m`.`show_parent` AS `show_parent`,`m`.`keep_alive` AS `keep_alive`,`m`.`frame_src` AS `frame_src`,`m`.`frame_loading` AS `frame_loading`,`m`.`transition_name` AS `transition_name`,`m`.`enter_transition` AS `enter_transition`,`m`.`leave_transition` AS `leave_transition`,`m`.`hidden_tag` AS `hidden_tag`,`m`.`dynamic_level` AS `dynamic_level`,`m`.`active_path` AS `active_path`,`m`.`fixed_tag` AS `fixed_tag`,`m`.`status` AS `status`,`m`.`extra_meta` AS `extra_meta`,`m`.`remark` AS `remark`,`r`.`id` AS `role_id`,`r`.`role_code` AS `role_code`,`r`.`role_name` AS `role_name`,`r`.`role_type` AS `role_type`,`r`.`data_scope` AS `data_scope`,`r`.`order_num` AS `role_order_num`,`r`.`status` AS `role_status`,`r`.`remark` AS `role_remark`,`p`.`id` AS `permission_id`,`p`.`permission_code` AS `permission_code`,`p`.`permission_name` AS `permission_name`,`p`.`permission_type` AS `permission_type`,`p`.`url` AS `url`,`p`.`method` AS `method`,`p`.`permission_level` AS `permission_level`,`p`.`permission_path` AS `permission_path`,`p`.`order_num` AS `permission_order_num`,`p`.`status` AS `permission_status`,`p`.`remark` AS `permission_remark` from ((((`sys_menu` `m` left join `sys_menu_role` `mr` on((`m`.`id` = `mr`.`menu_id`))) left join `sys_role` `r` on((`mr`.`role_id` = `r`.`id`))) left join `sys_role_permission` `rp` on((`r`.`id` = `rp`.`role_id`))) left join `sys_permission` `p` on((`rp`.`permission_id` = `p`.`id`))) where ((`m`.`is_deleted` = 0) and ((`r`.`id` is null) or (`r`.`is_deleted` = 0)) and ((`p`.`id` is null) or (`p`.`is_deleted` = 0)));
-- ----------------------------
-- View structure for v_user_role_permission
-- ----------------------------
DROP VIEW IF EXISTS `v_user_role_permission`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_user_role_permission` AS select `sys_user_role`.`user_id` AS `user_id`,`sys_role_permission`.`role_id` AS `role_id`,`sys_role_permission`.`permission_id` AS `permission_id`,`sys_permission`.`permission_code` AS `permission_code`,`sys_permission`.`permission_name` AS `permission_name`,`sys_permission`.`permission_type` AS `permission_type`,`sys_permission`.`url` AS `url`,`sys_permission`.`method` AS `method`,`sys_permission`.`permission_level` AS `permission_level`,`sys_permission`.`permission_path` AS `permission_path`,`sys_permission`.`order_num` AS `permission_order_num`,`sys_permission`.`status` AS `permission_status`,`sys_permission`.`remark` AS `permission_remark`,`sys_user`.`username` AS `username`,`sys_user`.`nickname` AS `nickname`,`sys_user`.`email` AS `email`,`sys_user`.`phone` AS `phone`,`sys_user`.`password` AS `password`,`sys_user`.`avatar` AS `avatar`,`sys_user`.`gender` AS `gender`,`sys_user`.`birthday` AS `birthday`,`sys_user`.`introduction` AS `introduction`,`sys_user`.`last_login_ip` AS `last_login_ip`,`sys_user`.`last_login_time` AS `last_login_time`,`sys_user`.`last_login_region` AS `last_login_region`,`sys_user`.`status` AS `status`,`sys_user`.`is_deleted` AS `is_deleted`,`sys_role`.`role_code` AS `role_code`,`sys_role`.`role_name` AS `role_name`,`sys_role`.`role_type` AS `role_type`,`sys_role`.`data_scope` AS `role_data_scope`,`sys_role`.`order_num` AS `role_order_num`,`sys_role`.`status` AS `role_status`,`sys_role`.`remark` AS `role_remark` from ((((`sys_role_permission` join `sys_role` on((`sys_role_permission`.`role_id` = `sys_role`.`id`))) join `sys_user_role` on((`sys_role`.`id` = `sys_user_role`.`role_id`))) join `sys_permission` on((`sys_role_permission`.`permission_id` = `sys_permission`.`id`))) join `sys_user` on((`sys_user_role`.`user_id` = `sys_user`.`id`)));
SET FOREIGN_KEY_CHECKS = 1;