Files
cms-SiteForge/docs/V8_26_GLOBAL_DESIGN.md
T

33 lines
2.8 KiB
Markdown
Raw Normal View History

# 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`。
## 安全保证
1. **跨站点隔离**:历史记录必须属于当前 site_id,否则返回 404;鉴权由 `enterprise.require` 处理。
2. **审核过期保护**:草稿版本或站点已发布 settings 变化,审核令牌失效;`publish-reviewed` 返回 409。
3. **原子发布与恢复**:读/校验/更新使用 `BEGIN IMMEDIATE` 事务窗口,降低读写竞态。
4. **原有发布安全不变**:全站设计发布只影响内容库和下一次静态构建,不会替换线上目录或跳过正式发布审批。
5. **前端差异防 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 官方工程编译。
**兼容提醒:** 历史发布快照恢复不会修改已经发布的网站;为了让恢复内容上线,必须在站点设计审核后重新发布、构建和部署。