diff --git a/rbac_system.sql b/rbac_system.sql new file mode 100644 index 0000000..f811286 --- /dev/null +++ b/rbac_system.sql @@ -0,0 +1,137 @@ +/* + * 核心用户体系 + * 存储系统用户基础身份信息 + */ +CREATE TABLE `sys_user` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID(自增主键)', + `username` VARCHAR(50) NOT NULL COMMENT '用户名(唯一标识,必须小写字母开头)', + `email` VARCHAR(100) NOT NULL COMMENT '邮箱(唯一标识,格式校验由程序控制)', + `phone` VARCHAR(20) COMMENT '手机号(国际区号+号码,例如+8613912345678)', + `is_locked` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '账户锁定状态(0-正常 1-锁定)', + `last_login_at` DATETIME COMMENT '最后登录时间(UTC时区)', + `avatar_url` VARCHAR(255) COMMENT '头像URL(CDN地址,格式:https://域名/路径)', + `user_type` VARCHAR(20) NOT NULL DEFAULT 'SYSTEM' COMMENT '用户类型(SYSTEM:系统用户/EXTERNAL:外部用户)', + `parent_id` BIGINT COMMENT '父用户ID(构建用户树形结构,NULL表示根节点)', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(自动生成,不可修改)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间(记录最后修改时间)', + PRIMARY KEY (`id`) COMMENT '主键约束', + UNIQUE INDEX `idx_username` (`username`) COMMENT '用户名唯一索引(加速登录验证)', + UNIQUE INDEX `idx_email` (`email`) COMMENT '邮箱唯一索引(保证账号唯一性)', + FOREIGN KEY (`parent_id`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL COMMENT '外键约束(父用户删除时置空,防止数据不一致)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主表(存储核心身份信息)'; + +-- 用户认证体系相关表(密码分离存储) +CREATE TABLE `sys_user_auth` ( + `user_id` BIGINT NOT NULL COMMENT '用户ID(与sys_user.id一对一绑定)', + `password_hash` VARCHAR(128) NOT NULL COMMENT 'BCrypt加密哈希值(固定60字符长度)', + `password_modified` DATETIME NOT NULL COMMENT '密码最后修改时间(UTC时区)', + `password_expire` DATETIME COMMENT '密码过期时间(NULL表示永不过期)', + PRIMARY KEY (`user_id`) COMMENT '主键约束', + FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动删除认证信息)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户认证表(存储敏感凭证信息)'; + +-- 密码历史记录表(防止重复使用旧密码) +CREATE TABLE `sys_password_history` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '记录ID(自增主键)', + `user_id` BIGINT NOT NULL COMMENT '用户ID(与sys_user.id关联)', + `old_password` VARCHAR(128) NOT NULL COMMENT '历史密码哈希值', + `modified_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间(UTC时区)', + PRIMARY KEY (`id`) COMMENT '主键约束', + INDEX `idx_user_pwd` (`user_id`, `modified_at`) COMMENT '复合索引(加速历史密码查询)', + FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动清理历史记录)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='密码历史表(保存最近N次历史密码)'; + +-- 组织架构体系相关表(支持树形结构) +CREATE TABLE `sys_organization` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '组织ID(自增主键)', + `org_name` VARCHAR(100) NOT NULL COMMENT '组织名称(显示用中文名)', + `org_code` VARCHAR(50) NOT NULL COMMENT '组织编码(唯一业务标识,如DEP001)', + `parent_id` BIGINT COMMENT '父组织ID(构建树形结构,NULL表示根节点)', + `manager_id` BIGINT COMMENT '负责人ID(关联sys_user.id)', + `tags` JSON COMMENT '组织标签(JSON数组,如["子公司","研发中心"])', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间(UTC时区)', + PRIMARY KEY (`id`) COMMENT '主键约束', + UNIQUE INDEX `idx_org_code` (`org_code`) COMMENT '组织编码唯一索引', + FOREIGN KEY (`parent_id`) REFERENCES `sys_organization` (`id`) COMMENT '外键约束(维护树形结构完整性)', + FOREIGN KEY (`manager_id`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL COMMENT '外键约束(负责人删除时置空)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织架构表(支持多层级结构)'; + + +/* + * RBAC核心表(基于角色的访问控制) + * 包含角色、权限及其关联关系 + */ +CREATE TABLE `sys_role` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色ID(自增主键)', + `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称(显示用中文名)', + `role_key` VARCHAR(50) NOT NULL COMMENT '角色标识符(唯一英文键,如admin)', + `description` VARCHAR(255) COMMENT '角色描述(功能说明)', + `parent_id` BIGINT COMMENT '父角色ID(构建角色继承树)', + PRIMARY KEY (`id`), + UNIQUE INDEX `idx_role_key` (`role_key`) COMMENT '角色标识符唯一索引', + FOREIGN KEY (`parent_id`) REFERENCES `sys_role` (`id`) COMMENT '外键约束(维护角色继承关系)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表(定义系统角色)'; + +CREATE TABLE `sys_permission` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限ID(自增主键)', + `perm_name` VARCHAR(50) NOT NULL COMMENT '权限名称(显示用中文名)', + `perm_key` VARCHAR(100) NOT NULL COMMENT '权限标识符(唯一业务键,如user:delete)', + `description` VARCHAR(255) COMMENT '权限描述(功能说明)', + `parent_id` BIGINT COMMENT '父权限ID(构建权限树形结构)', + PRIMARY KEY (`id`), + UNIQUE INDEX `idx_perm_key` (`perm_key`) COMMENT '权限标识符唯一索引', + FOREIGN KEY (`parent_id`) REFERENCES `sys_permission` (`id`) COMMENT '外键约束(维护权限继承关系)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表(定义细粒度权限)'; + +-- 用户-角色关联表(多对多关系) +CREATE TABLE `sys_user_role` ( + `user_id` BIGINT NOT NULL COMMENT '用户ID(关联sys_user.id)', + `role_id` BIGINT NOT NULL COMMENT '角色ID(关联sys_role.id)', + PRIMARY KEY (`user_id`, `role_id`) COMMENT '复合主键', + FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动解除关联)', + FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE COMMENT '级联删除(角色删除时自动解除关联)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表(建立用户与角色的多对多关系)'; + +-- 角色-权限关联表(多对多关系) +CREATE TABLE `sys_role_permission` ( + `role_id` BIGINT NOT NULL COMMENT '角色ID(关联sys_role.id)', + `perm_id` BIGINT NOT NULL COMMENT '权限ID(关联sys_permission.id)', + PRIMARY KEY (`role_id`, `perm_id`) COMMENT '复合主键', + FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE COMMENT '级联删除(角色删除时自动解除关联)', + FOREIGN KEY (`perm_id`) REFERENCES `sys_permission` (`id`) ON DELETE CASCADE COMMENT '级联删除(权限删除时自动解除关联)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表(建立角色与权限的多对多关系)'; + +/* + * 扩展字段体系(支持动态字段管理) + * 包含字段定义和用户扩展数据存储 + */ +CREATE TABLE `sys_field_definition` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '字段ID(自增主键)', + `field_key` VARCHAR(50) NOT NULL COMMENT '字段标识符(英文唯一键,如birthday)', + `field_name` VARCHAR(50) NOT NULL COMMENT '字段显示名称(如"出生日期")', + `field_type` ENUM('STRING','NUMBER','DATE','BOOLEAN','TEXT') NOT NULL DEFAULT 'STRING' COMMENT '字段类型(控制数据格式)', + `is_required` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否必填(0-否 1-是)', + `is_unique` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否唯一(0-否 1-是)', + `user_types` JSON NOT NULL COMMENT '适用的用户类型(JSON数组,如["SYSTEM","EXTERNAL"])', + `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态(0-停用 1-启用)', + `created_by` BIGINT NOT NULL COMMENT '创建人ID(关联sys_user.id)', + `updated_by` BIGINT NOT NULL COMMENT '最后修改人ID(关联sys_user.id)', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间(UTC时区)', + PRIMARY KEY (`id`), + UNIQUE INDEX `idx_field_key` (`field_key`) COMMENT '字段标识符唯一索引', + FOREIGN KEY (`created_by`) REFERENCES `sys_user` (`id`) COMMENT '外键约束(创建人必须存在)', + FOREIGN KEY (`updated_by`) REFERENCES `sys_user` (`id`) COMMENT '外键约束(修改人必须存在)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字段定义表(管理员维护动态字段)'; + +CREATE TABLE `sys_user_profile` ( + `user_id` BIGINT NOT NULL COMMENT '用户ID(关联sys_user.id)', + `field_id` BIGINT NOT NULL COMMENT '字段ID(关联sys_field_definition.id)', + `field_value` TEXT NOT NULL COMMENT '字段值(根据字段类型校验格式)', + `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', + `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间(UTC时区)', + PRIMARY KEY (`user_id`, `field_id`) COMMENT '复合主键', + FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动清理扩展数据)', + FOREIGN KEY (`field_id`) REFERENCES `sys_field_definition` (`id`) COMMENT '外键约束(确保字段定义有效)' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户扩展表(存储动态字段数据)'; \ No newline at end of file diff --git a/yuheng.sql b/yuheng.sql new file mode 100644 index 0000000..825ed11 --- /dev/null +++ b/yuheng.sql @@ -0,0 +1,127 @@ +CREATE TABLE `sys_dict` ( + `id` int NOT NULL, + `pid` int NULL, + `module` tinyint NULL, + `key` varchar(255) NULL, + `value` varchar(255) NULL, + PRIMARY KEY (`id`) +); + +CREATE TABLE `sys_organization` ( + `org_id` bigint NOT NULL, + `pid` bigint NULL, + `org_name` varchar(255) NULL, + `org_code` varchar(128) NULL, + `org_type` int NULL, + `desc` varchar(255) NULL, + PRIMARY KEY (`org_id`) +); + +CREATE TABLE `sys_organization_manager` ( + `id` bigint NOT NULL COMMENT '1', + `org_id` bigint NOT NULL COMMENT '1', + `user_id` bigint NOT NULL COMMENT '1', + `rank` int NOT NULL COMMENT '1', + `status` int ZEROFILL NOT NULL COMMENT '1', + `desc` varchar(255) NULL, + PRIMARY KEY (`id`) +); + +CREATE TABLE `sys_permission` ( + `perm_id` int NOT NULL, + `pid` int NULL, + `perm_name` varchar(255) NULL, + `perm_key` varchar(255) NULL, + `avatar_url` varchar(255) NULL, + `desc` varchar(255) NULL, + `perm_type` varchar(255) NULL, + PRIMARY KEY (`perm_id`) +); + +CREATE TABLE `sys_re_role_permission` ( + `id` int NOT NULL, + `role_id` int NULL, + `perm_id` int NULL, + PRIMARY KEY (`id`) +); + +CREATE TABLE `sys_re_user_organization` ( + `id` int NOT NULL, + `user_id` int NULL, + `org_id` int NULL, + PRIMARY KEY (`id`) +); + +CREATE TABLE `sys_re_user_role` ( + `id` int NOT NULL, + `user_id` int NULL, + `role_id` int NULL, + PRIMARY KEY (`id`) +); + +CREATE TABLE `sys_role` ( + `role_id` int NOT NULL, + `pid` int NULL, + `role_name` varchar(255) NULL, + `role_key` varchar(255) NULL, + `desc` varchar(255) NULL, + PRIMARY KEY (`role_id`) +); + +CREATE TABLE `sys_user` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `pid` bigint ZEROFILL NOT NULL COMMENT '上级ID', + `username` varchar(255) NOT NULL COMMENT '用户名,全小写', + `email` varchar(255) NOT NULL COMMENT '邮箱', + `phone` varchar(255) NULL COMMENT '手机号', + `avatar_url` varchar(255) NULL COMMENT '图标', + `user_type` tinyint NULL DEFAULT NULL COMMENT '用户类型从字典取', + `status` tinyint DEFAULT 0 NOT NULL COMMENT '状态', + PRIMARY KEY (`user_id`) +) COMMENT '用户基础信息表'; + +CREATE TABLE `sys_user_auth` ( + `user_id` bigint NOT NULL COMMENT '用户ID', + `password_hash` varchar(255) NOT NULL COMMENT '用户密码', + `password_modified` varchar(255) NOT NULL COMMENT '上一次修改时间', + `password_expire` varchar(255) NULL DEFAULT NULL COMMENT '过期时间', + PRIMARY KEY (`user_id`) +) COMMENT '用户密码表'; + +CREATE TABLE `sys_user_auth_history` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '历史记录自增主键', + `user_id` bigint NOT NULL COMMENT '用户id', + `password_hash` varchar(255) NOT NULL COMMENT '历史密码值,注意需要限制密码更改次数', + `modified_at` varchar(255) NOT NULL COMMENT '上次修改的时间', + PRIMARY KEY (`id`) +) COMMENT '历史密码表'; + +CREATE TABLE `sys_user_field_definition` ( + `field_id` int NOT NULL AUTO_INCREMENT COMMENT '用户拓展字段ID', + `field_name` varchar(255) NOT NULL COMMENT '拓展字段名称', + `field_key` varchar(255) NOT NULL COMMENT '拓展字段标识', + `field_type` tinyint NOT NULL COMMENT '拓展字段类型0文字1数字2日期3单选4多选5附件6富文本', + `dict_module` int NULL COMMENT '字典集模块值', + `is_required` tinyint NOT NULL DEFAULT 0 COMMENT '是否必填0否1是', + `limit` int NULL COMMENT '值长度,最大2048', + PRIMARY KEY (`field_id`) +) COMMENT '用户拓展字段定义表'; + +CREATE TABLE `sys_user_field_value` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户拓展字段记录id', + `user_id` bigint NOT NULL COMMENT '用户ID', + `field_id` int NOT NULL COMMENT '字段ID', + `dictId` int NULL COMMENT '使用字典后的字典ID', + `value` varchar(4096) NULL COMMENT '用户拓展字段值', + PRIMARY KEY (`id`) +) COMMENT '用户拓展字段记录表'; + +CREATE TABLE `sys_user_profile` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '系统配置自增主键', + `name` varchar(32) NOT NULL COMMENT '系统配置名称', + `key` varchar(255) NOT NULL COMMENT '系统配置记录Key', + `desc` varchar(255) NULL COMMENT '系统配置记录描述', + `content` varchar(255) NULL COMMENT '系统配置记录值', + PRIMARY KEY (`id`) +) COMMENT '系统配置'; +