文档优化:将核心架构与流程字符图转换为Mermaid

This commit is contained in:
wangzhibiao committed 2026-09-18 09:36:39 +08:00
1 parent 8b54dee004
commit 18a3bfb50e
12 files changed
+141 -244

No files matched your search

@@ -10,27 +10,20 @@
在多角色(Admin, Teacher, Student)登录体系中,数据范围安全必须建立在**零信任前端参数**的基石之上:
```
+─────────────────────────────────────────────────────────────────────────────+
| 零信任推导核心防线 (Secure Chain) |
| |
| 客户端 HTTP Request |
| │ (仅携带 Bearer JWT Token,禁止/忽略 query 或 body 中的 identityId) |
| ▼ |
| Spring Security Filter: JwtAuthenticationTokenFilter |
| │ (验签并提取 claims 中的 userId) |
| ▼ |
| SecurityContextHolder.getContext().getAuthentication() |
| │ (获取受信任的 LoginUser.getUserId()) |
| ▼ |
| Service 内部数据推导 (SecurityContextHelper) |
| ├─ 若拥有 train_teacher 角色: |
| │ SELECT t_id FROM train_teacher WHERE user_id = #{userId} |
| ├─ 若拥有 train_student 角色: |
| │ SELECT s_id FROM train_student WHERE user_id = #{userId} |
| └─ 若拥有 admin / train_admin 角色: |
| 按管理员角色规则放行或基于组织机构过滤 |
+─────────────────────────────────────────────────────────────────────────────+
```mermaid
flowchart TD
Req["客户端 HTTP Request<br/>(仅携带 Bearer JWT Token,禁止/忽略 query 或 body 中的 identityId)"]
Filter["Spring Security Filter: JwtAuthenticationTokenFilter<br/>(验签并提取 claims 中的 userId)"]
SecCtx["SecurityContextHolder.getContext().getAuthentication()<br/>(获取受信任的 LoginUser.getUserId())"]
Helper["Service 内部数据推导 (SecurityContextHelper)"]
Req --> Filter
Filter --> SecCtx
SecCtx --> Helper
Helper -->|"拥有 train_teacher 角色"| TeacherRole["SELECT t_id FROM train_teacher WHERE user_id = #{userId}"]
Helper -->|"拥有 train_student 角色"| StudentRole["SELECT s_id FROM train_student WHERE user_id = #{userId}"]
Helper -->|"拥有 admin / train_admin 角色"| AdminRole["按管理员角色规则放行或基于组织机构过滤"]
```
### 1.1 核心铁律
@@ -44,30 +37,16 @@
教师登录后,其可访问的所有教学资源必须严格基于其受聘授课关系动态推导:
```
┌──────────────────────┐
│ sys_user (userId) │
└──────────┬───────────┘
│ WHERE user_id = #{userId}
▼
┌──────────────────────┐
│ train_teacher (t_id)│
└──────────┬───────────┘
│
┌───────────────────────┼────────────────────────┐
│ (排课直接授课) │ (计划课程关联) │ (关联教学班级)
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│timetable_lesson │ │train_plan_course │ │ train_class_plan │
│WHERE teacher_id │ │WHERE teacher_id │ │ WHERE plan_id IN │
│ = #{t_id} │ │ = #{t_id} │ │ (授课班级集合) │
└────────┬─────────┘ └──────────────────┘ └────────┬─────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│student_checkin │ │training_enrollment
│(本人课次考勤流水) │ │(我带的班级学员名单)│
└──────────────────┘ └──────────────────┘
```mermaid
flowchart TD
User["sys_user (userId)"] -->|"WHERE user_id = #{userId}"| Teacher["train_teacher (t_id)"]
Teacher -->|"排课直接授课"| Lesson["timetable_lesson<br/>WHERE teacher_id = #{t_id}"]
Teacher -->|"计划课程关联"| PlanCourse["train_plan_course<br/>WHERE teacher_id = #{t_id}"]
Teacher -->|"关联教学班级"| ClassPlan["train_class_plan<br/>WHERE plan_id IN (授课班级集合)"]
Lesson --> Checkin["student_checkin<br/>(本人课次考勤流水)"]
ClassPlan --> Enrollment["training_enrollment<br/>(我带的班级学员名单)"]
```
- **授课课表数据**: 仅能查到 `train_timetable_lesson.teacher_id = #{currentTeacherId}` 的课次。
@@ -80,29 +59,17 @@
学员登录后,进入极简个人培训中心,数据范围完全收敛于“本人”:
```
┌──────────────────────┐
│ sys_user (userId) │
└──────────┬───────────┘
│ WHERE user_id = #{userId}
▼
┌──────────────────────┐
│ train_student (s_id)│
└──────────┬───────────┘
│
┌─────────────┬───────────────┼───────────────┬─────────────┐
▼ ▼ ▼ ▼ ▼
┌───────┐ ┌──────────────┐ ┌───────────┐ ┌──────────────┐ ┌────────────┐
│ 个人 │ │ 参训班级名单 │ │ 个人报到 │ │ 个人考勤记录 │ │ 个人画像/ │
│ 档案 │ │ Enrollment │ │ Report │ │ Checkin │ │ 学时累计 │
│(只读) │ │WHERE s_id=...│ │WHERE s_id │ │WHERE s_id=...│ │WHERE s_id │
└───────┘ └──────┬───────┘ └───────────┘ └──────────────┘ └────────────┘
│
▼
┌──────────────┐
│ 班级参训课表 │
│(仅限正常在训)│
└──────────────┘
```mermaid
flowchart TD
User["sys_user (userId)"] -->|"WHERE user_id = #{userId}"| Student["train_student (s_id)"]
Student --> Profile["个人档案 (只读)"]
Student --> Enrollment["参训班级名单 (Enrollment)<br/>WHERE s_id = ..."]
Student --> Report["个人报到 (Report)<br/>WHERE s_id = ..."]
Student --> Checkin["个人考勤记录 (Checkin)<br/>WHERE s_id = ..."]
Student --> Portrait["个人画像 / 学时累计<br/>WHERE s_id = ..."]
Enrollment --> Timetable["班级参训课表<br/>(仅限正常在训)"]
```
- **学员档案**: 仅能读取与更新本人通讯电话、邮箱。