Files
railwaysystem/docs/development/rbac-r2/02_role_permission_matrix.md
T

125 lines
11 KiB
Markdown

# RailwaySystem 角色体系与权限矩阵设计 (Role & Permission Matrix)
- **设计版本**: R.2A Design Freeze
- **设计日期**: 2026-09-15
- **核心目标**: 建立三角色(Admin, Teacher, Student)标准化角色定义,冻结权限命名空间,输出全量权限比对矩阵、角色菜单矩阵与角色操作权限矩阵。
---
## 1. 预置业务角色模型设计 (Role Model)
针对一期业务闭环与后续演进,系统正式规划 3 个预置业务角色(写入 `sys_role`):
| 角色标识 (role_key) | 角色名称 (role_name) | 角色排序 (role_sort) | 数据范围 (data_scope) | 状态 (status) | 职责与业务定义 |
| :--- | :--- | :---: | :---: | :---: | :--- |
| `train_admin` | 培训管理员 | 3 | `1` (全部数据权限) | `0` (正常) | 负责全局师资、学员、计划、排课、报到、考勤、场地等业务的集中调度与管理。 |
| `train_teacher` | 培训教师 | 4 | `2` (自定义业务推导) | `0` (正常) | 仅能查看与本人授课相关的课程、课表、培训班及学员,具备课次考勤查看与合规操作权限。 |
| `train_student` | 培训学员 | 5 | `2` (本人私有推导) | `0` (正常) | 仅能查看本人的参训班级、课程日程、个人报到状态、个人考勤、学时累计与个人画像。 |
*注:超级管理员 `admin (role_id=1)` 仍保留在系统最顶层,作为系统底层运维、字典与安全审计兜底。*
---
## 2. 权限命名空间统一冻结方案 (FINAL_PERMISSION_NAMESPACE_PROPOSAL)
### 2.1 规范原则
所有业务领域权限字符串必须严格遵循标准三段式格式:
```
train:<domain>:<action>
```
- `<domain>`: 业务领域名称,全部小写单数或固定模块名(如 `teacher`, `student`, `course`, `classroom`, `site`, `plan`, `lesson`, `enrollment`, `report`, `attendance`, `board`, `duration`, `portrait`)。
- `<action>`: 具体操作谓词,标准化定义:
- 查询类:`list` (列表分页), `query` (详情单查), `export` (报表导出)
- 变更类:`add` (新增), `edit` (编辑修改), `remove` (删除/作废)
- 核心状态机动作类:`confirm` (确认), `checkin` (打卡), `complete` (归档完成)
### 2.2 命名空间收敛与历史兼容
1. **统一班牌命名空间**:
- 纠正历史版本中混杂的 `system:board:*`,在 R.2B 中全量收敛为 `train:board:list/add/query/edit/remove/export`。
2. **严守已正式冻结的 Action 契约**:
- `train:report:confirm` (报到确认) —— **严格保留**
- `train:attendance:checkin` (课次签到打卡) —— **严格保留**
- `train:attendance:edit` (考勤人工修正) —— **严格保留**
- `train:plan:complete` (结束培训计划) —— **严格保留**
---
## 3. 全量权限字符串审计与对齐矩阵 (PERMISSION_MISMATCH_MATRIX)
本矩阵排查了当前代码库中所有业务模块的权限字符串匹配状态:
| 业务模块 (Module) | 前端权限 (Frontend Perm) | 后端权限 (Backend Perm) | 数据库 sys_menu.perms | 现状评定 (Status) | R.2 规范与整改方案 |
| :--- | :--- | :--- | :--- | :---: | :--- |
| **教师管理** | `train:teacher:add/edit` | `train:teacher:list/query/add/edit` | **缺失按钮行** | `MISSING` | 在 `005_...sql` 中为 `sys_menu` 补全对应按钮权限行 |
| **学员管理** | `train:student:add/query` | `train:student:list/query/add` | **缺失按钮行** | `MISSING` | 补齐 `train:student:list/add/edit/query/export` |
| **课程管理** | `train:course:add/edit` | `train:course:list/query/add/edit` | **缺失按钮行** | `MISSING` | 补齐 `train:course:list/query/add/edit` |
| **教室资源** | `train:classroom:edit` | `train:classroom:list/edit` | **缺失按钮行** | `MISSING` | 补齐 `train:classroom:list/edit` |
| **实训场地** | `train:site:edit` | `train:site:list/edit` | **缺失按钮行** | `MISSING` | 补齐 `train:site:list/edit` |
| **培训计划** | `train:plan:add/edit/query/complete` | `train:plan:list/query/add/edit/complete` | **缺失按钮行** | `MISSING` | 补齐 `train:plan:*` 按钮行 |
| **入班分班** | `train:enrollment:add/edit/remove/query/list/import` | `train:enrollment:list/query/add/edit/remove/import` | **缺失按钮行** | `MISSING` | 补齐 `train:enrollment:*` 按钮行 |
| **排课编排** | `train:lesson:add/edit/remove` | `train:lesson:query/add/edit/remove` | **缺失按钮行** | `MISSING` | 补齐 `train:lesson:*` 按钮行 |
| **现场报到** | `train:report:confirm/export` | `train:report:list/confirm/export` | `train:report:list/confirm/export` | `MATCH` | 完全合规,无需调整 |
| **考勤管理** | `train:attendance:export` | `train:attendance:list/checkin/edit/export` | `train:attendance:list/checkin/edit/export` | `MATCH` | 前端增加操作按钮权限控制 |
| **电子班牌** | `system:board:add/edit/remove/export` | `system:board:list/query/add/edit/remove/export` | **缺失/未归入train** | `MISMATCH` | 前后端与 SQL 统一切换为 `train:board:*` |
| **学习时长** | `train:learning:export` | `train:learning:list/export` | `train:learning:list/export` | `MATCH` | 完全合规 |
| **学员画像** | `train:portrait:export` | `train:portrait:query/export` | `train:portrait:query/export` | `MATCH` | 完全合规 |
| **宿舍管理** | `train:dormitory:list/edit` | `train:dormitory:list/edit` | **缺失按钮行** | `MISSING` | 补齐 `train:dormitory:list/edit` |
| **废弃遗留** | `train:auth:*`, `train:role:*` | **无对应控制器** | **无** | `LEGACY` | 清理废弃未使用的历史遗留权限标签 |
---
## 4. 角色-菜单矩阵 (ROLE_MENU_MATRIX)
本矩阵定义了不同身份用户登录系统后,前端侧边栏动态加载的菜单可见性:
| 菜单项 / 业务模块 | 路由路径 (Path) | 管理员 (Admin) | 教师 (Teacher) | 学员 (Student) | 交互与展示说明 |
| :--- | :--- | :---: | :---: | :---: | :--- |
| **系统控制台首页** | `/index` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 管理员全局概览 |
| **教师工作台首页** | `/train/teacher/dashboard` | `HIDDEN` | `VISIBLE` | `HIDDEN` | 教师专属 Landing 页 (我的课表/班级) |
| **学员培训中心首页** | `/train/student/portal` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员专属 Landing 页 (报到/课表/考勤) |
| **师资队伍管理** | `/business/teacher` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 教师仅能由管理员维护 |
| **学员档案管理** | `/business/student` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 学员全量档案仅管理员可见 |
| **课程标准化管理** | `/business/course` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 课程全量字典与学时标准 |
| **教学场地/设施** | `/business/classroom`, `/business/site` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 物理教学资源管理 |
| **培训计划管理** | `/business/training-plan` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 全局立项与归档操作 |
| **课表编排日历** | `/business/timetable/lesson` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 全局智能排课与冲突消解 |
| **我的授课日程** | `/train/teacher/timetable` | `HIDDEN` | `VISIBLE` | `HIDDEN` | 教师专有:仅呈现本人授课课次 |
| **我的培训课表** | `/train/student/timetable` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员专有:仅呈现本人参训课表 |
| **我的教学班级** | `/train/teacher/classes` | `HIDDEN` | `VISIBLE` | `HIDDEN` | 教师专有:所授课班级及学员花名册 |
| **现场报到管理** | `/business/training-report` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 管理端集中报到审核核销 |
| **我的报到信息** | `/train/student/report` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员专有:个人报到凭证与状态核对 |
| **课次考勤管理** | `/business/attendance` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 管理端全局考勤大盘与异常处理 |
| **班级授课考勤** | `/train/teacher/attendance` | `HIDDEN` | `CONDITIONAL` | `HIDDEN` | 仅支持教师查看本人课次考勤流水 |
| **我的考勤打卡** | `/train/student/attendance` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员专有:仅查阅本人签到签退流水 |
| **智慧电子班牌** | `/business/board` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 终端物理状态与大屏绑定 |
| **学员学习时长** | `/business/duration` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 全局学时统计 |
| **我的学时档案** | `/train/student/duration` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员个人有效学时汇算明细 |
| **学员画像大盘** | `/business/portrait` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 全员综合评价分析 |
| **我的个人画像** | `/train/student/portrait` | `HIDDEN` | `HIDDEN` | `VISIBLE` | 学员本人的雷达评价与成长轨迹 |
| **系统与操作日志** | `/system/log/operlog` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 安全审计人员专属 |
| **系统用户/角色管理** | `/system/user`, `/system/role` | `VISIBLE` | `HIDDEN` | `HIDDEN` | 基础用户权限分配 |
---
## 5. 角色-操作权限矩阵 (ROLE_ACTION_MATRIX)
本矩阵明确在各业务功能的操作点上,不同角色的允许状态(ALLOW / DENY / CONDITIONAL):
| 业务操作动作 (Action) | 管理员 (Admin) | 教师 (Teacher) | 学员 (Student) | 业务安全规则与执行逻辑 |
| :--- | :---: | :---: | :---: | :--- |
| **创建/编辑教师主体** | `ALLOW` | `DENY` | `DENY` | 仅教务管理员具备师资建档权限 |
| **创建/编辑学员档案** | `ALLOW` | `DENY` | `DENY` | 仅教务管理员具备学员建档与身份证录入权限 |
| **开通/绑定登录账号** | `ALLOW` | `DENY` | `DENY` | 管理员受控统一分配账号 |
| **创建/修改培训计划** | `ALLOW` | `DENY` | `DENY` | 培训计划属于全局业务管理资源 |
| **执行编排排课** | `ALLOW` | `DENY` | `DENY` | 智能排课引擎与冲突消解仅限管理端 |
| **确认 Soft Warning 排课** | `ALLOW` | `DENY` | `DENY` | 普通保存流程仅限教务操作员确认 |
| **学员批量分配入班** | `ALLOW` | `DENY` | `DENY` | 计划学员编组仅限管理员操作 |
| **现场报到确认** | `ALLOW` | `DENY` | `DENY` | 线下现场审核证件并核销报到 |
| **课次签到打卡** | `CONDITIONAL` | `DENY` | `ALLOW` | 学员本人通过终端打卡;管理员受控补签 |
| **课次签退打卡** | `CONDITIONAL` | `DENY` | `ALLOW` | 学员离场打卡;签退时间严格冻结防篡改 |
| **考勤人工修正 (迟到等)** | `ALLOW` | `CONDITIONAL` | `DENY` | 管理员全权修正;教师经授权可提交修正申请 |
| **结束计划与联动归档** | `ALLOW` | `DENY` | `DENY` | 仅管理员可终结培训计划全生命周期 |
| **查看他人敏感信息** | `ALLOW` | `DENY` | `DENY` | 教师/学员严禁读取未授权的他人身份证与隐私 |
| **导出业务分析报表** | `ALLOW` | `CONDITIONAL` | `DENY` | 教师仅能导出所带班级名册;学员无导出权 |
| **用户与系统权限维护** | `ALLOW` | `DENY` | `DENY` | 严防普通用户提权 |