8884e100f9
Overlay 190 upstream items (V8.22→8.31) preserving trade-pro theme, registry tests, and design docs. Re-applied full patch set on identical anchors (discovery/env_for/blocks.css/type-mapping/locale-override/ theme_color/frontend entries/test_theme_pro_v3 mods) plus compose pins. Verified: theme suites 35/35; dual-baseline full run 415 passed vs pristine 386+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails). Live: container 8.31.1-dev.1 healthy, hesupipe 192 entries intact, trade-pro build 203 pages 0 errors. Co-Authored-By: Claude Code <noreply@anthropic.com>
2.8 KiB
2.8 KiB
V8.26 全站设计管理 — 实现与验收
基线: SiteForge V8.25.0-dev.1。当前源码版本:V8.26.0-dev.1。
核心架构
已有 site_design_drafts 与 site_design_publications 保存全站草稿与发布快照。本轮不改变数据库 Schema,主要在 app/site_design_v87.py 增加审核差异、审核令牌、历史快照查询与安全恢复。前端主要在 app/templates/editor.html、app/static/editor.js、app/static/editor.css。
- 导航采用树形数据,层级不超过 3,总元素不超过 48、同层最多 18;仍执行原 URL 白名单校验。
GET /api/sites/{site}/site-design/review将已发布配置与当前草稿逐字段比较,返回变更清单、影响范围及绑定 site_id、草稿版本、当前站点设置哈希的plan_token。POST /api/sites/{site}/site-design/publish-reviewed仅 Owner 可调用;在同一数据库事务内校验草稿版本和 token 后发布。旧发布接口为兼容保留,但当前编辑器改用审核发布接口。GET /api/sites/{site}/site-design/publications/{id}返回所属站点历史版本及结构化差异。GET /api/sites/{site}/site-design/live-hash返回当前已发布站点设置哈希。POST /api/sites/{site}/site-design/publications/{id}/restore在单一事务中检查历史归属、当前正式配置哈希、预期草稿版本及目标快照是否合法,然后写入新的全站草稿。不会直接修改sites.settings_json。
安全保证
- 跨站点隔离:历史记录必须属于当前 site_id,否则返回 404;鉴权由
enterprise.require处理。 - 审核过期保护:草稿版本或站点已发布 settings 变化,审核令牌失效;
publish-reviewed返回 409。 - 原子发布与恢复:读/校验/更新使用
BEGIN IMMEDIATE事务窗口,降低读写竞态。 - 原有发布安全不变:全站设计发布只影响内容库和下一次静态构建,不会替换线上目录或跳过正式发布审批。
- 前端差异防 XSS:所有用户输入展示均使用
textContent,不将差异数据当作 HTML 执行。
验收结果与限制
- 23 个隔离 Python 测试批次:376 项通过,0 失败、0 超时。
- JavaScript:13 项通过;
node --check通过。 - HTTP + Worker:健康检查、登录、CSRF、站点/页面创建、异步构建、ZIP 下载和预览通过。
- Chromium:离线页面通过
set_content隔离加载验证新增导航、子菜单、保存、审核与历史模拟(0 脚本错误);没有完成真实登录后台的浏览器 E2E。 - 未执行真实 PostgreSQL/Redis、远程正式部署与 Art Design Pro 官方工程编译。
兼容提醒: 历史发布快照恢复不会修改已经发布的网站;为了让恢复内容上线,必须在站点设计审核后重新发布、构建和部署。