1.9 KiB
1.9 KiB
角色权限迁移说明
概述
将角色权限从关系表 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_idsJSON 字段 - 从
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: 更新GetRoleMenus和AssignRolePermissions函数
注意事项
- 备份数据:迁移前请确保已备份数据库
- 测试环境:建议先在测试环境执行迁移
- 数据一致性:迁移后请验证权限分配功能是否正常
- 性能影响:JSON 字段查询性能可能略低于关系表,但简化了数据结构
JSON 字段格式
menu_ids 字段存储格式为 JSON 数组,例如:
[1, 2, 3, 4, 5]
空数组表示该角色没有任何权限:
[]