library-picturebook-activity/docs/migration/default-role-matrix.md
2026-04-01 19:30:33 +08:00

41 lines
2.6 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.

# 默认角色/菜单/权限 最小可用集(全租户)
本文件用于指导 Flyway “全租户补齐”迁移脚本的默认授权策略,目标是让任一租户创建后即可登录、看到菜单、并具备最小可用功能入口。
## 角色role.code
- `super_admin`:平台超管(通常仅超级租户/运维使用)
- `tenant_admin`:租户管理员(每个租户至少 1 个)
- `school_admin`:学校管理端角色
- `teacher`:教师端角色
- `student`:学生端角色
- `judge`:评委端角色
> 注:目前历史迁移仅对 `tenant_id=1` 初始化了 `school_admin/teacher/student/judge`,但线上实际登录已出现 `tenant_admin`,因此迁移需对全租户补齐该角色。
## 菜单可见性t_auth_role_menu
### tenant_admin租户管理员
- **默认策略**:可见全部管理端菜单,但**不包含平台级租户管理**(避免非平台人员管理其他租户)。\n
- ✅ 包含:除 `permission='super_admin'` 以及 `permission LIKE 'tenant:%'` 的菜单外的所有 `t_auth_menu`。\n
- ✅ 祖先节点补齐:即使祖先菜单未直接授权,也应在接口层补齐返回。\n
- ✅ 说明:最终可见菜单仍以 `t_auth_role_menu` 为准;如需更精细裁剪,可在系统中二次授权。
### school_admin / teacher / student / judge
- **默认策略**:优先按 `tenant_id=1` 的同名角色授权模板复制到其他租户(同 role.code。\n
- 复制范围:`t_auth_role_menu` 中 `role_id` 对应 `tenant_id=1``role.code IN ('school_admin','teacher','student','judge')` 的记录。\n
- 如果模板不存在,则降级为:仅授予 `workbench` + 与角色端相关的一级菜单(例如 `activities`/`homework`)。
## 权限t_auth_role_permission
### 权限来源
-`tenant_id=1` 为“权限码模板”:将 `t_auth_permission(tenant_id=1)` 中的权限码复制到所有租户(缺失则补齐)。\n
- 原因:权限表按租户隔离,但权限码是全局统一的前后端契约;菜单/路由/按钮依赖这些 code。
### tenant_admin建议最小集
- **系统管理(租户内)**`user:*`、`role:*`、`permission:*`、`menu:*`、`dict:*`、`config:*`、`log:*`\n
- **业务最小可用**:建议至少包含 `contest:*`、`registration:*`、`judge:*`、`notice:*`、`homework:*`、`work:*`、`activity:*`、`review:score`、以及前端提取的权限码(见 `docs/migration/permission-inventory.md`)。
### 其他角色
- 默认按 `tenant_id=1` 角色模板复制 `t_auth_role_permission`;不存在模板时至少保证页面可进入(满足路由 `meta.permissions`)。\n