Establish .doc/{status,audit,remediation,archive} structure with README
maps, migrate 15 root audit/remediation docs, and add redirect stubs.
Co-authored-by: Cursor <cursoragent@cursor.com>
4.1 KiB
4.1 KiB
Phase 0 API 授权矩阵与术语冻结
依据:2026-09-11-production-ready-workflow-governance-plan.md Phase 0
状态:Phase 0 止血基线(非完整 RBAC 权威化)
一、术语冻结
| 术语 | 定义 | Phase 0 权威来源 |
|---|---|---|
| 系统角色 | 如 role-admin,决定系统级管理能力 |
服务端 users.role_id(内存/后续持久化) |
| 项目成员角色 | owner / member / viewer |
数据库 project_members + internal/authz |
| 文档职责 | 单文档 author / reviewer / approver |
DocGov + 文档任务(Phase 1+ 解耦) |
| 登录主体 | 当前会话用户 | 仅 Bearer / X-Session-Token → principalFromContext |
| 前端权限 | hasPermission / localStorage roles |
非安全边界,仅 UI 体验层 |
Phase 0 红线:
- 禁止新增依赖
localStorage的权威业务状态。 - 禁止产品 UI 身份模拟、
X-User-ID请求头、bodyuser_id覆盖 principal。 - 对象级授权以服务端 middleware + 已挂载的
requireProjectAccess为准。
二、公开路由(无需认证)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /, /health, /api/v1/health |
SPA / 健康检查 |
| POST | /api/v1/auth/login |
登录 |
| POST | /api/v1/auth/register |
注册(若启用) |
| * | 非 /api/* |
静态资源 / SPA fallback |
三、API 资源—动作—条件矩阵
图例:authn=需登录;admin=需 role-admin;proj=需 requireProjectAccess;—=未挂对象级授权(Phase 1 补齐)
| 路由 | authn | admin | proj | Phase 0 备注 |
|---|---|---|---|---|
POST /api/v1/projects |
✓ | — | — | 创建人来自 token |
GET /api/v1/projects |
✓ | — | — | 列表按 user_id 过滤 |
GET /api/v1/projects/{id} |
✓ | — | ✓ | |
GET /api/v1/projects/{id}/workflows |
✓ | — | ✓ | |
PUT /api/v1/projects/{id}/active-workflow |
✓ | — | ✓ | |
POST /api/v1/projects/{id}/workflows/{key}/run |
✓ | — | ✓ | |
GET /api/v1/projects/{id}/workflows/{key}/runs |
✓ | — | ✓ | |
GET /api/v1/projects/{id}/lineage |
✓ | — | ✓ | |
GET /api/v1/projects/{id}/documents |
✓ | — | ✓ | |
POST/GET /api/v1/projects/{id}/assets |
✓ | — | ✓ | |
GET /api/v1/workflows |
✓ | — | — | |
POST /api/v1/chat |
✓ | — | — | user_id 来自 principal |
POST/GET /api/v1/chat/stream |
✓ | — | — | SSE;principal 强制 |
GET /api/v1/chat/turns/{id} |
✓ | — | — | |
POST/GET /api/v1/tasks/run/stream |
✓ | — | — | |
POST /api/v1/tasks/runs 等 |
✓ | — | 部分 | task_run_auth |
POST /api/v1/admin/workspaces/reconcile |
✓ | ✓ | — | |
GET/PUT /api/v1/context/user* |
✓ | — | — | |
GET /api/v1/context/project |
✓ | — | — | |
GET/POST /api/v1/chat/sessions 等 |
✓ | — | — | 会话归属校验 |
GET/POST /api/v1/freeform-documents* |
✓ | — | — | owner 校验在 service |
GET/POST /api/v1/docgov/* |
✓ | — | — | DocGov 三权 |
POST /api/v1/auth/logout 等 |
✓ | — | — | |
GET/POST /api/v1/admin/users |
✓ | ✓ | — | |
GET/PUT /api/v1/admin/config |
✓ | ✓ | — |
四、Phase 0 已知 P0-gap(→ Phase 1)
| 缺口 | 说明 |
|---|---|
| 无 DB 时 authz 降级 | authorizer.enabled()==false 时任意已登录用户可访问任意 project_id(仅 dev/stub) |
| localStorage RBAC | 前端按钮可见性仍非服务端 capabilities |
| 阶段/文档 ABAC | 未实施;BD 跨阶段隔离在 Phase 3 |
五、Phase 0 验收对照
| 门禁 | 验证方式 |
|---|---|
| 无身份切换 UI | scripts/check-prod-bundle.sh + 人工 |
| 匿名 API 401 | TestP0_AnonymousBusinessAPIReturns401 |
| X-User-ID 无效 | TestP0_XUserIDCannotAuthenticate |
| body user_id 不覆盖 principal | TestP0_BodyUserIDCannotOverridePrincipal |
| 生产无种子用户 | TestMemoryStore_MainEnvNoSeedUsers |
| main 禁止 AllowInMemory | TestValidateProductionSecrets_RejectsAllowInMemory |
CORS 无 * |
TestP0_CORSAllowlist |