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

72 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 角色权限迁移说明
## 概述
将角色权限从关系表 `yz_role_menus` 迁移到 `yz_roles` 表的 JSON 数组字段 `menu_ids`
## 迁移步骤
### 1. 执行迁移脚本
```bash
mysql -u gotest -p gotest < server/database/migrate_role_permissions_to_json.sql
```
或者在 MySQL 客户端中执行:
```sql
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. 确认数据正确性
执行以下查询验证数据:
```sql
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. 删除旧表(可选)
确认数据迁移正确后,可以删除旧的关系表:
```sql
DROP TABLE IF EXISTS yz_role_menus;
```
## 回滚方案
如果迁移出现问题,可以使用回滚脚本:
```bash
mysql -u gotest -p gotest < server/database/rollback_role_permissions.sql
```
## 代码变更
- `server/models/role.go`: 添加 `MenuIds` 字段和 JSON 序列化/反序列化方法
- `server/models/permission.go`: 更新 `GetRoleMenus``AssignRolePermissions` 函数
## 注意事项
1. **备份数据**:迁移前请确保已备份数据库
2. **测试环境**:建议先在测试环境执行迁移
3. **数据一致性**:迁移后请验证权限分配功能是否正常
4. **性能影响**JSON 字段查询性能可能略低于关系表,但简化了数据结构
## JSON 字段格式
`menu_ids` 字段存储格式为 JSON 数组,例如:
```json
[1, 2, 3, 4, 5]
```
空数组表示该角色没有任何权限:
```json
[]
```