# 默认角色/菜单/权限 最小可用集(全租户) 本文件用于指导 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