| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- -- ============================================
- -- 迁移 v6:管理员表隔离
- -- 将 ADMIN/SUPER_ADMIN 从 t_user 分离到 t_admin
- -- ============================================
- -- 1. 创建管理员表
- CREATE TABLE IF NOT EXISTS `t_admin` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `username` VARCHAR(64) NOT NULL COMMENT '用户名',
- `password` VARCHAR(128) NOT NULL COMMENT '密码(BCrypt加密)',
- `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
- `role` VARCHAR(20) NOT NULL DEFAULT 'ADMIN' COMMENT '角色:ADMIN/SUPER_ADMIN',
- `status` INT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用 1-正常',
- `token_version` BIGINT DEFAULT 0 COMMENT 'Token版本号',
- `refresh_token_hash` VARCHAR(64) DEFAULT NULL COMMENT 'Refresh Token SHA-256哈希',
- `refresh_token_status` VARCHAR(10) DEFAULT NULL COMMENT 'Refresh Token状态:ACTIVE/USED',
- `last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
- `last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
- `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_username` (`username`),
- UNIQUE KEY `uk_phone` (`phone`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员表';
- -- 2. 从 t_user 迁移现有管理员数据到 t_admin
- -- username 使用 nickname 作为默认值(如果没有则用 phone)
- INSERT INTO `t_admin` (`id`, `username`, `password`, `phone`, `role`, `status`,
- `token_version`, `refresh_token_hash`, `refresh_token_status`,
- `last_login_time`, `last_login_ip`, `create_time`, `update_time`)
- SELECT
- `id`,
- COALESCE(`nickname`, `phone`, CONCAT('admin_', `id`)) AS `username`,
- COALESCE(`password`, '') AS `password`,
- `phone`,
- `role`,
- `status`,
- COALESCE(`token_version`, 0) AS `token_version`,
- `refresh_token_hash`,
- `refresh_token_status`,
- `last_login_time`,
- `last_login_ip`,
- `create_time`,
- `update_time`
- FROM `t_user`
- WHERE `role` IN ('ADMIN', 'SUPER_ADMIN');
- -- 3. 迁移后清理 t_user 中的管理员数据(保留记录但清除 role)
- -- 注意:不删除 t_user 中的行,因为管理员可能同时也是用户(有业务数据关联)
- -- 但 role 改为 USER,因为 t_user 不再区分 ADMIN/SUPER_ADMIN
- UPDATE `t_user` SET `role` = 'USER' WHERE `role` IN ('ADMIN', 'SUPER_ADMIN');
|