diff --git a/docs/superpowers/specs/2026-08-01-teacher-management-class-lock-design.md b/docs/superpowers/specs/2026-08-01-teacher-management-class-lock-design.md new file mode 100644 index 0000000..fbdca10 --- /dev/null +++ b/docs/superpowers/specs/2026-08-01-teacher-management-class-lock-design.md @@ -0,0 +1,26 @@ +# 教师管理与建班账号锁定设计 + +## 背景 + +学校当前不使用院系、专业、行政班。教师管理需展示当前学校的全部教师账号;教师一旦创建了仍存在的教学班,账号不得编辑或删除。 + +现有编辑页仍按院系、专业加载展示名称。无组织结构模式下这些 ID 为空,名称查询直接解引用空对象,导致编辑报错。 + +## 行为 + +1. 教师管理列表以当前操作人所属学校为唯一范围,管理型教师可以查看该学校全部教师;普通教师保持只读。 +2. 列表为每个教师补充 `hasCreatedClass` 状态:其 `created_by` 等于该教师 ID 的任意现存班级即为真。 +3. `hasCreatedClass` 为真时,前端禁用编辑、删除并提示“该教师已创建班级,不允许编辑或删除”。 +4. 后端更新和删除接口都复用同一建班检查,作为前端禁用之外的强制保护。 +5. 无院系、专业、行政班模式下,教师编辑表单不展示或查询院系、专业数据;未建班教师可正常编辑姓名、工号、电话、邮箱等账号资料。 + +## 实现边界 + +- 班级锁定只检查当前仍存在的班级记录;创建者删除自己所有班级后,账号恢复可编辑、可删除。 +- 不改变教师账号创建、导入、密码初始化和角色授权规则。 +- 不增加新的持久化字段;`hasCreatedClass` 为列表响应的运行时派生字段。 + +## 验证 + +- 后端测试覆盖:当前学校范围查询、已建班教师更新/删除被拒绝、未建班教师可更新。 +- 前端静态测试覆盖:请求携带操作人、无组织模式不再请求院系专业、锁定行禁用编辑/删除。