feat: enforce student avatar presets

This commit is contained in:
Codex
2026-06-30 15:56:01 +08:00
parent ddad2ac04d
commit d94b20b8ed
13 changed files with 110 additions and 28 deletions

View File

@@ -74,5 +74,6 @@ types.ts 仅本领域使用的类型
- 平台公共题库不能被租户前端直接跨租户读取;平台侧通过 `/api/platform-admin/question-bank-grants` 授权,租户侧通过 `/api/tenant-content/public-question-banks/adopt` 采纳为本租户题库、入口、集合和题目快照。后续版本同步必须走 worker 和审计。
- `learning` 创建练习 session 时必须保存 `question_ids` 快照,避免随机刷题和模考过程中题目集合变化导致答题记录无法复盘。
- 排行榜必须由后端按租户、地区、班级和可信用户上下文聚合,并受 `tenant_settings.feature_flags.enableLeaderboard` 控制,默认关闭;前端不能自行扫描答题记录、积分流水或单词进度后排名,也不能在个人中心默认请求排行榜;后续高流量场景再通过 worker/materialized view 做日榜、周榜和防刷。
- 学生头像是产品级安全边界:学生端、租户后台学生运营、批量导入、批量分班都不能写 `avatarUrl/avatar_url/avatar/headimgurl/figureurl` 等字段,也不能通过学生接口写 `primaryRole/primary_role`;学生展示头像统一来自 `student_profiles.avatar_preset` 的男女默认头像。
- 资料、PDF、视频等对象存储资源必须先进入 `content_assets` 台账,再通过 API/Edge Function 做权限校验和签名 URL 下发;前端不能直接拼 OSS/COS/Supabase Storage 私有地址。
- 批量导入必须先写 `content_import_jobs/items/issues`,保留原始 payload、规范化 payload、逐行问题和审计记录题目、单词、知识手册、分数线和视频 JSON/CSV/Excel 都应进入同一管线,复杂大批量导入通过 `executionMode=async` 交给 imports worker 消费。