migration-v6.sql 2.6 KB

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