## 目标
- 彻底移除旧字段与索引，保证仅以实体化模型（bindings→persons→students/teachers）运转。
- 补充接口文档与示例，并统一鉴权口径（系统角色等级＋实体身份）。

## 待执行工作
1) 统一鉴权依赖
- 在 `app/api/deps.py` 增加 `require_binding(type)`，校验存在主绑定且实体类型匹配（student/teacher）。
- 学生端与班主任端路由分别挂载 `require_binding('student')` 与 `require_binding('teacher')`，中层/校级端保持角色等级校验。

2) 路由与服务清理
- `app/services/dashboard.py`：
  - 班主任端查询仅使用 `head_teacher_person_id`；移除对 `head_teacher_id` 的回退。
  - 学生/中层/校级端均以“绑定→实体”解析路径，移除旧字段回退。
- `app/api/v1/students.py`：仅以绑定解析学生，不再读取旧 `user_id`。

3) 数据与索引维护
- 运行维护脚本（或在 `init_db.py` 的维护段）删除旧索引：
  - `classes.head_teacher_id_1`、`schedules.teacher_id_1`、`students.user_id_1`
- 确保集合不再写入或依赖旧字段：
  - `classes.head_teacher_id`、`schedules.teacher_id`、`students.user_id`

4) 文档与示例
- 在文档中补充以下内容：
  - 绑定接口用法与主绑定约束
  - 人员/教师批量导入字段说明与示例
  - 班级/课表实体化字段设置示例
  - 仪表盘各角色返回示例（关键字段）
  - 迁移流程与注意事项（导入顺序、索引清理）

5) 验证
- MCP 校验集合：确认不再存在旧字段与旧索引；`students.person_id`、`classes.head_teacher_person_id`、`schedules.teacher_person_id` 正常。
- 接口联调：
  - 学生端：需主绑定且类型为 student；返回课表/出勤/操行
  - 班主任端：以 `head_teacher_person_id` 定位所辖班；返回当前节次课程与地点、节次出勤、请假与指示
  - 中层/校级端：统计与序列化正常，无 `ObjectId` 泄露

## 回滚策略
- 保留兼容分支的开关，在异常时临时恢复旧字段回退；完成 M4 验证后默认关闭。

如果你确认，我将按以上步骤执行：先实现依赖与代码清理，再完成索引维护与文档补充，最后进行 MCP 与接口联调验证。