yunzer_go/server/database/迁移说明.md
2025-11-06 15:56:29 +08:00

1.9 KiB
Raw Blame History

角色权限迁移说明

概述

将角色权限从关系表 yz_role_menus 迁移到 yz_roles 表的 JSON 数组字段 menu_ids

迁移步骤

1. 执行迁移脚本

mysql -u gotest -p gotest < server/database/migrate_role_permissions_to_json.sql

或者在 MySQL 客户端中执行:

source server/database/migrate_role_permissions_to_json.sql

2. 验证迁移结果

迁移脚本会自动:

  • yz_roles 表中添加 menu_ids JSON 字段
  • yz_role_menus 表迁移数据到 menu_ids 字段
  • 创建备份表 yz_role_menus_backup
  • 验证迁移结果

3. 确认数据正确性

执行以下查询验证数据:

SELECT 
    r.role_id,
    r.role_name,
    r.menu_ids,
    JSON_LENGTH(r.menu_ids) as menu_count,
    (SELECT COUNT(*) FROM yz_role_menus_backup WHERE role_id = r.role_id) as old_count
FROM yz_roles r
WHERE r.delete_time IS NULL
ORDER BY r.role_id;

4. 删除旧表(可选)

确认数据迁移正确后,可以删除旧的关系表:

DROP TABLE IF EXISTS yz_role_menus;

回滚方案

如果迁移出现问题,可以使用回滚脚本:

mysql -u gotest -p gotest < server/database/rollback_role_permissions.sql

代码变更

  • server/models/role.go: 添加 MenuIds 字段和 JSON 序列化/反序列化方法
  • server/models/permission.go: 更新 GetRoleMenusAssignRolePermissions 函数

注意事项

  1. 备份数据:迁移前请确保已备份数据库
  2. 测试环境:建议先在测试环境执行迁移
  3. 数据一致性:迁移后请验证权限分配功能是否正常
  4. 性能影响JSON 字段查询性能可能略低于关系表,但简化了数据结构

JSON 字段格式

menu_ids 字段存储格式为 JSON 数组,例如:

[1, 2, 3, 4, 5]

空数组表示该角色没有任何权限:

[]