admin_backend/db/admin_permission_rbac.sql
hahwu 9468ec5873 用户权限管理
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 10:35:36 +08:00

213 lines
15 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

USE game;
-- 后台权限管理增量表设计
-- 兼容现有 admin 表,不重建 admin仅通过 admin.id 建立关联。
-- 保留 admin.group / admin.role 旧字段,便于平滑迁移;新权限体系以 RBAC 关系表为准。
CREATE TABLE IF NOT EXISTS `admin` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用户名',
`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '密码',
`real_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '真实姓名',
`nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '显示名称',
`phone` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '手机号',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '邮箱',
`token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '令牌',
`group` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '旧用户组字段,兼容历史逻辑',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态1启用 0停用',
`expires` int DEFAULT 0 COMMENT '过期时间',
`role` int DEFAULT NULL COMMENT '旧角色字段,兼容历史逻辑',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`lastLoginTime` int NOT NULL DEFAULT 0 COMMENT '最近登录时间',
`lastLoginIp` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近登录IP',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间',
`updateTime` int NOT NULL DEFAULT 0 COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `user_unique` (`username`),
KEY `idx_admin_status` (`status`),
KEY `idx_admin_phone` (`phone`),
KEY `idx_admin_email` (`email`)
) ENGINE = InnoDB AUTO_INCREMENT = 16 DEFAULT CHARSET = utf8mb4;
-- 对已有 admin 表做增量补齐,避免与现网库冲突。
ALTER TABLE `admin`
ADD COLUMN IF NOT EXISTS `real_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '真实姓名' AFTER `password`,
ADD COLUMN IF NOT EXISTS `nickname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '显示名称' AFTER `real_name`,
ADD COLUMN IF NOT EXISTS `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注' AFTER `role`,
ADD COLUMN IF NOT EXISTS `lastLoginTime` int NOT NULL DEFAULT 0 COMMENT '最近登录时间' AFTER `remark`,
ADD COLUMN IF NOT EXISTS `lastLoginIp` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近登录IP' AFTER `lastLoginTime`;
CREATE TABLE IF NOT EXISTS `admin_user_group` (
`id` int NOT NULL AUTO_INCREMENT,
`group_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户组编码,例如 G_OP',
`group_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户组名称',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态1启用 0停用',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
`updateTime` int NOT NULL DEFAULT 0 COMMENT '更新时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_user_group_code` (`group_code`),
KEY `idx_admin_user_group_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台用户组表';
CREATE TABLE IF NOT EXISTS `admin_role` (
`id` int NOT NULL AUTO_INCREMENT,
`role_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色编码,例如 R_SUPER',
`role_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态1启用 0停用',
`is_system` tinyint NOT NULL DEFAULT 0 COMMENT '是否系统内置1是 0否',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
`updateTime` int NOT NULL DEFAULT 0 COMMENT '更新时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_role_code` (`role_code`),
KEY `idx_admin_role_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台角色表';
CREATE TABLE IF NOT EXISTS `admin_permission` (
`id` int NOT NULL AUTO_INCREMENT,
`permission_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '单点权限编码,例如 AC0004',
`permission_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限名称',
`permission_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限分组,例如 activity/config/user',
`api_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口路径,例如 /api/activity/edit',
`http_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请求方法,例如 GET/POST/PUT/DELETE',
`status` tinyint NOT NULL DEFAULT 1 COMMENT '状态1启用 0停用',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`update_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
`updateTime` int NOT NULL DEFAULT 0 COMMENT '更新时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_permission_code` (`permission_code`),
KEY `idx_admin_permission_group` (`permission_group`),
KEY `idx_admin_permission_path_method` (`api_path`, `http_method`),
KEY `idx_admin_permission_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='后台单点权限表';
CREATE TABLE IF NOT EXISTS `admin_user_group_rel` (
`id` int NOT NULL AUTO_INCREMENT,
`admin_id` int NOT NULL COMMENT 'admin.id',
`group_id` int NOT NULL COMMENT 'admin_user_group.id',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_user_group_rel` (`admin_id`, `group_id`),
KEY `idx_admin_user_group_rel_group_id` (`group_id`),
CONSTRAINT `fk_admin_user_group_rel_admin_id` FOREIGN KEY (`admin_id`) REFERENCES `admin` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_admin_user_group_rel_group_id` FOREIGN KEY (`group_id`) REFERENCES `admin_user_group` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员与用户组关联表';
CREATE TABLE IF NOT EXISTS `admin_group_role_rel` (
`id` int NOT NULL AUTO_INCREMENT,
`group_id` int NOT NULL COMMENT 'admin_user_group.id',
`role_id` int NOT NULL COMMENT 'admin_role.id',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_group_role_rel` (`group_id`, `role_id`),
KEY `idx_admin_group_role_rel_role_id` (`role_id`),
CONSTRAINT `fk_admin_group_role_rel_group_id` FOREIGN KEY (`group_id`) REFERENCES `admin_user_group` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_admin_group_role_rel_role_id` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户组与角色关联表';
CREATE TABLE IF NOT EXISTS `admin_role_permission_rel` (
`id` int NOT NULL AUTO_INCREMENT,
`role_id` int NOT NULL COMMENT 'admin_role.id',
`permission_id` int NOT NULL COMMENT 'admin_permission.id',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_role_permission_rel` (`role_id`, `permission_id`),
KEY `idx_admin_role_permission_rel_permission_id` (`permission_id`),
CONSTRAINT `fk_admin_role_permission_rel_role_id` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_admin_role_permission_rel_permission_id` FOREIGN KEY (`permission_id`) REFERENCES `admin_permission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色与单点权限关联表';
CREATE TABLE IF NOT EXISTS `admin_user_permission_rel` (
`id` int NOT NULL AUTO_INCREMENT,
`admin_id` int NOT NULL COMMENT 'admin.id',
`permission_id` int NOT NULL COMMENT 'admin_permission.id',
`grant_type` tinyint NOT NULL DEFAULT 1 COMMENT '授权类型1允许 2拒绝支持单点覆盖角色权限',
`create_admin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`createTime` int NOT NULL DEFAULT 0 COMMENT '创建时间,秒级时间戳',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_admin_user_permission_rel` (`admin_id`, `permission_id`),
KEY `idx_admin_user_permission_rel_permission_id` (`permission_id`),
KEY `idx_admin_user_permission_rel_grant_type` (`grant_type`),
CONSTRAINT `fk_admin_user_permission_rel_admin_id` FOREIGN KEY (`admin_id`) REFERENCES `admin` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_admin_user_permission_rel_permission_id` FOREIGN KEY (`permission_id`) REFERENCES `admin_permission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员单点权限关联表';
-- 初始化示例数据
INSERT INTO `admin_user_group` (`group_code`, `group_name`, `status`, `remark`, `create_admin`, `update_admin`, `createTime`, `updateTime`)
VALUES
('G_SUPER', '超级管理员组', 1, '系统初始化用户组', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('G_OP', '运营组', 1, '运营后台使用', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('G_CS', '客服组', 1, '客服后台使用', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())
ON DUPLICATE KEY UPDATE
`group_name` = VALUES(`group_name`),
`status` = VALUES(`status`),
`remark` = VALUES(`remark`),
`update_admin` = VALUES(`update_admin`),
`updateTime` = VALUES(`updateTime`);
INSERT INTO `admin_role` (`role_code`, `role_name`, `status`, `is_system`, `remark`, `create_admin`, `update_admin`, `createTime`, `updateTime`)
VALUES
('R_SUPER', '超级管理员', 1, 1, '默认拥有全量权限', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('R_ACTIVITY', '活动管理员', 1, 1, '管理活动与配置', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('R_NOTIFICATION', '通知管理员', 1, 1, '管理客户端通知配置', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())
ON DUPLICATE KEY UPDATE
`role_name` = VALUES(`role_name`),
`status` = VALUES(`status`),
`remark` = VALUES(`remark`),
`update_admin` = VALUES(`update_admin`),
`updateTime` = VALUES(`updateTime`);
INSERT INTO `admin_permission` (`permission_code`, `permission_name`, `permission_group`, `api_path`, `http_method`, `status`, `remark`, `create_admin`, `update_admin`, `createTime`, `updateTime`)
VALUES
('AC0001', '管理员列表查询', 'admin', '/api/admin/list', 'POST', 1, '查看管理员列表', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('AC0002', '管理员新增', 'admin', '/api/admin/add', 'POST', 1, '新增后台管理员', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('AC0003', '客户端通知查询', 'notification', '/api/client/notification', 'GET', 1, '查看客户端 notification 配置', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('AC0004', '客户端通知修改', 'notification', '/api/client/notification', 'PUT', 1, '单点权限标签示例AC0004', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
('AC0005', '活动编辑', 'activity', '/api/activity/edit', 'POST', 1, '编辑活动配置', 'system', 'system', UNIX_TIMESTAMP(), UNIX_TIMESTAMP())
ON DUPLICATE KEY UPDATE
`permission_name` = VALUES(`permission_name`),
`permission_group` = VALUES(`permission_group`),
`api_path` = VALUES(`api_path`),
`http_method` = VALUES(`http_method`),
`status` = VALUES(`status`),
`remark` = VALUES(`remark`),
`update_admin` = VALUES(`update_admin`),
`updateTime` = VALUES(`updateTime`);
-- 初始化关联关系示例
INSERT INTO `admin_group_role_rel` (`group_id`, `role_id`, `create_admin`, `createTime`)
SELECT g.id, r.id, 'system', UNIX_TIMESTAMP()
FROM `admin_user_group` g
JOIN `admin_role` r
WHERE (g.group_code = 'G_SUPER' AND r.role_code = 'R_SUPER')
OR (g.group_code = 'G_OP' AND r.role_code = 'R_ACTIVITY')
OR (g.group_code = 'G_OP' AND r.role_code = 'R_NOTIFICATION')
ON DUPLICATE KEY UPDATE
`create_admin` = VALUES(`create_admin`);
INSERT INTO `admin_role_permission_rel` (`role_id`, `permission_id`, `create_admin`, `createTime`)
SELECT r.id, p.id, 'system', UNIX_TIMESTAMP()
FROM `admin_role` r
JOIN `admin_permission` p
WHERE (r.role_code = 'R_SUPER')
OR (r.role_code = 'R_ACTIVITY' AND p.permission_code IN ('AC0005'))
OR (r.role_code = 'R_NOTIFICATION' AND p.permission_code IN ('AC0003', 'AC0004'))
ON DUPLICATE KEY UPDATE
`create_admin` = VALUES(`create_admin`);
-- 可选:把现有管理员挂到默认用户组,请按实际用户名替换。
-- INSERT INTO `admin_user_group_rel` (`admin_id`, `group_id`, `create_admin`, `createTime`)
-- SELECT a.id, g.id, 'system', UNIX_TIMESTAMP()
-- FROM `admin` a
-- JOIN `admin_user_group` g ON g.group_code = 'G_SUPER'
-- WHERE a.username IN ('admin');