forked from wangziqi/gongxue-base
feat: harden production storage readiness
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
- `docs/refactor/ai-development-guardrails.md`
|
||||
- `docs/refactor/content-import-contract.md`
|
||||
- `docs/refactor/object-storage.md`
|
||||
- `docs/refactor/object-storage-production-runbook.md`
|
||||
- `docs/refactor/project-structure.md`
|
||||
- `docs/refactor/frontend-handoff-index.md`
|
||||
- `docs/refactor/backend-capability-status.md`
|
||||
@@ -335,6 +336,7 @@ API 身份上下文:
|
||||
- 租户公开配置和主题配置不能存放密钥;主题 token 只能是后端允许的颜色、半径、安全 CSS 变量、图标 token 和公开素材引用。
|
||||
- 商户密钥、短信密钥、OAuth app secret 等必须进入 `app_private.tenant_secrets`,或后续生产 KMS/Vault。
|
||||
- 资料、PDF、视频等资源必须先进入 `content_assets` 台账,再由 API 校验权限并下发签名 URL;学生端预览、锁定资料和视频会使用短 TTL,并返回带 `traceId` 的 `watermark` 上下文供前端渲染可见水印。`members/svip/private` 外部 CDN URL 默认拒绝,除非显式登记 provider-managed 访问;所有上传签名、上传确认、下载/预览 granted/denied 都写入 `content_asset_access_events`。托管对象必须 `uploadStatus=verified` 且 `securityScanStatus=passed` 后才能发布、下载、预览或播放;生产环境应定时运行 assets worker 复检对象元数据,执行 `metadata_rules` 和外部 HTTP scanner,异常资源会被标记 failed/skipped 并退回 draft。
|
||||
- `NODE_ENV=production` 下 API 和 worker 都会拒绝 `STORAGE_DEFAULT_PROVIDER=local_dev`、空 bucket 或关闭 `STORAGE_REQUIRE_TENANT_PREFIX`;worker 还会拒绝未接入外部 HTTP 安全扫描或开启 fail-open 的生产配置。
|
||||
- 题库入口和分类使用 `content_entries/content_nodes`;题目列表和练习规则使用 `question_collections/practice_blueprints`,前端不要再把旧树字段当成唯一业务结构。
|
||||
- 批量导入必须先写 `content_import_jobs/items/issues`,保留原始 payload、规范化 payload、逐行问题和审计记录。题目、单词、知识手册、分数线和视频 JSON/CSV/Excel 导入已走这套后台校验管线;大批量任务可提交 `executionMode=async`,由 imports worker 消费,前端只轮询 job 状态和展示 issues。学生端题干/解析/手册内容统一走 `apps/taro/src/components/RichContent.tsx` 做受控渲染,不执行导入内容中的任意 HTML/JS;公式只渲染解析出的 LaTeX token,私有题图只接受资源 ID 引用并走后端短签名。
|
||||
- 题库导出必须由后端按权限生成,不允许前端直接读取数据库拼导出文件;不开启答案/解析时,顶层题目和复合题子题都必须脱敏;PDF/Word/每日一练 ZIP 只通过 exports worker 写入 `content_assets` 后再签名下载/预览。
|
||||
|
||||
Reference in New Issue
Block a user