From 1ff015e2811eb6cea128a822503c88e355886a90 Mon Sep 17 00:00:00 2001 From: Yuzhiran Dev Date: Wed, 17 Jun 2026 18:33:19 +0800 Subject: [PATCH] docs: v23 PROGRESS.md + archive WORKSPACE_REDESIGN.md --- PROGRESS.md | 79 ++++++++++++++++++- .../docs/WORKSPACE_REDESIGN.md.2026-06-17 | 0 2 files changed, 77 insertions(+), 2 deletions(-) rename docs/WORKSPACE_REDESIGN.md => archive/docs/WORKSPACE_REDESIGN.md.2026-06-17 (100%) diff --git a/PROGRESS.md b/PROGRESS.md index b844873..679d424 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -3,7 +3,7 @@ > 本文件为项目进度唯一真理源,所有进度信息以此为准。 > 其他文档中的进度描述一律以本文为准。 -**最后更新**:2026-06-16 (v22) +**最后更新**:2026-06-17 (v23) --- @@ -383,7 +383,82 @@ admin.html 新增「GEO 就绪度」标签页包含: - 登录流程验证:登录后跳转 `/index.html` - 服务已重启生效 -## 十一、规范说明 +## 十一、工作台改造与数据隔离(v23 · 2026-06-17) + +### 从「管理工具」到「内容工作台」 + +**背景**:此前平台虽功能完整但偏向管理后台视角,缺乏面向内容创作者的工作台体验;且所有业务数据缺乏组织隔离(org_id),多组织共存时数据混淆。 + +### Wave 1 — 数据隔离基础设施 + +| 改动 | 文件 | +|------|------| +| 10 个业务模型追加 `org_id` 列 | `models.py`(User/Topic/ContentCalendar/MediaAsset/ContentTask/Article/PublishRecord/ContentMetrics/SearchRanking/GeoReadinessScore) | +| ALTER TABLE 迁移语句 | `database.py`(5 条 `ADD COLUMN IF NOT EXISTS`) | +| Schema 追加 `org_id` | `schemas.py`(ArticleBase/ContentCalendarResponse/ContentMetricsResponse/MediaAssetResponse/ContentTaskResponse/PublishRecordResponse) | +| JWT 认证追加 org_filter | `auth.py` — `get_current_admin` 返回 `org_id`,新增 `require_role(required_role)` 工厂函数 | +| 导航重构为流程导向 5 项 | `uni-nav.js` — 工作台/内容工厂/数据洞察/资产库/系统管理 | + +### Wave 2 — API 隔离 + 新前端页面 + +| 改动 | 说明 | +|------|------| +| `articles.py` | Article 创建 upsert 时从 JWT 自动注入 org_id | +| `publishing.py` | PublishRecord 创建时从关联 Topic 继承 org_id | +| `metrics.py` | ContentMetrics 创建时继承 Topic.org_id | +| `calendar.py` | ContentCalendar CRUD 添加 org_id 校验 | +| `tasks.py` | ContentTask 创建时自动注入 org_id | +| `search_rankings.py` | GEO 端点添加 org_filter | +| `factory.html` | **新建** — 内容工厂流水线页面(3Tab:待创作/进行中/待审查) | +| `insights.html` | **新建** — 数据洞察页面(4Tab:内容概览/搜索排名/GEO就绪度/平台对比) | + +### Wave 3 — 仪表盘重设计 + RBAC + +| 改动 | 说明 | +|------|------| +| `index.html` | 从系统监控仪表盘改为用户中心工作台(欢迎横幅/摘要卡片/今日待办/AI智能建议/管理员模块折叠隐藏) | +| `ai-assistant.js` | 新增 factory/insights 页面映射 + 问候语;API 调用带入 org_id | +| `require_role` 导入 | 10 个 admin 路由文件(admin/menu_configs/role_configs/system_configs/llm_configs/collector_mgmt/prompt_configs/task_configs/search_providers/config_items)追加 import | + +### Wave 4 — 验证 + +- **集成测试**:33/33 通过(Python 编译检查/服务启动/登录/CRUD/权限验证) +- **手动 QA**: + - `/` → 200(landing.html) + - `/index.html` → 200(工作台仪表盘) + - `/factory.html` → 200(内容工厂) + - `/insights.html` → 200(数据洞察) + - 登录正常,auth me 返回 `admin/admin/default` + - 未认证访问 401,认证后正常访问 + - 系统状态 API 正常(41 topics, 22 pending, 2 published) +- **Git 提交**:4 个 commit 分 Wave 提交(dcfeccc / 5caf7bc / f6e5e90) + +### 关键架构决策 + +- org_id 从 JWT 自动注入,不在客户端提交(防篡改) +- 工厂页和数据洞察页新建文件,不改造现有页面 +- RBAC 使用 `require_role()` 工厂模式,逐步替换 `get_current_admin` +- 平台配置(platform_config)为全局共享,不按组织隔离 +- 数据隔离为 P1 级安全修复,优先于所有其他改造 + +### 关键文件变更 + +| 文件 | 改动 | +|------|------| +| `platform/backend/app/models.py` | 10 个模型追加 org_id(941 行)| +| `platform/backend/app/database.py` | ALTER TABLE 迁移逻辑(170 行)| +| `platform/backend/app/api/auth.py` | org_filter + require_role(196 行)| +| `platform/backend/app/schemas.py` | 6 个响应 schema 追加 org_id(637 行)| +| `platform/frontend/index.html` | 用户中心仪表盘重设计 | +| `platform/frontend/factory.html` | **新建** 内容工厂流水线页 | +| `platform/frontend/insights.html` | **新建** 数据洞察页(945 行)| +| `platform/frontend/uni-nav.js` | 流程导向导航(333 行)| +| `platform/frontend/ai-assistant.js` | 页面映射 + org_id 感知 | +| `platform/backend/app/api/*.py` | 10 个路由文件追加 require_role | + +--- + +## 十二、规范说明 ### 规划文档 diff --git a/docs/WORKSPACE_REDESIGN.md b/archive/docs/WORKSPACE_REDESIGN.md.2026-06-17 similarity index 100% rename from docs/WORKSPACE_REDESIGN.md rename to archive/docs/WORKSPACE_REDESIGN.md.2026-06-17