213 lines
15 KiB
SQL
213 lines
15 KiB
SQL
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');
|