Workspace 管理
- Asset
- ADP-PLN-FEAT-DOC-0053
- Feature
- workspace-management
- 领域
- plane-core
- 作用域
- application-level
- 文档状态
- draft
- 产品生命周期
- active
- 文档 Owner
- DOC
- 事实源
- canonical-docs
- 工程 Owner
- PLN
- Development Ready
- not-ready
- 更新
- 2026/10/14
FEATURE DEVELOPMENT PACKAGE
工程就绪状态
工程 Owner:PLN · 仓库:PLN
- 原子需求与验收
- 设计与工程合同
- 代码与仓库定位
- 里程碑与工作包
- 验证计划
- 无阻断决策
- Development Ready 已通过
- 验收标准已覆盖
- 正式测试已登记
- Fixture 与环境已定义
- 测试规格已物化到正式测试
- Verification Ready 已通过
- 实现修订可定位
- 发布证据已登记
- 兼容与迁移已定义
- Runbook 与回滚已定义
查看阻断项(5)
- Development Ready 缺少:原子需求与验收
- Development Ready 缺少:设计与工程合同
- Development Ready 缺少:代码与仓库定位
- Development Ready 缺少:里程碑与工作包
- Development Ready 缺少:验证计划
功能目标
让已登录用户创建 Workspace,并让 Workspace Admin 在明确的租户边界内维护 Workspace 身份、基础设置与退出/删除前置条件。
功能结论
| 主题 | 当前结论 |
|---|---|
| Producer / 用户 | 已登录用户可创建 Workspace;Workspace Admin 管理 Workspace 设置与删除。 |
| 入口 | /{workspaceSlug}/settings;Workspace URL 在设置页展示并可复制。 |
| 可见结果 | 查看或修改名称、Logo、组织规模和时区;slug 作为当前 URL identity 只读展示。 |
| 当前系统保证 | Workspace 数据带稳定 id/slug;slug 唯一;项目和成员通过 Workspace 外键隔离;未授权 UI 控件不可编辑。 |
| 明确不做 | 不在本页拥有实例设置、计费、成员角色、部门、Project 配置或运行环境状态。 |
| 权威 owner | 本页拥有 Workspace identity、基础设置与生命周期边界;当前实现事实由 Plane source 持有。 |
当前落地状态、已批准合同与差距
- 当前落地状态:Plane Web 已提供 Workspace General Settings。当前表单允许 Admin 修改 name、logo、organization size、timezone;slug/URL 只读。后端模型保存 name、slug、logo、owner、organization size、timezone 和审计字段。
- 已批准合同:本轮只批准该能力作为工作空间级 Feature,以及 Workspace 是成员、Project 和下游资源的租户边界;源码观察不自动升级为长期产品承诺。
- 当前差距:Web 表单仅向 Admin 开放更新,但通用 Workspace API permission 对 PUT/PATCH 仍允许 Admin 与 Member;角色矩阵需要收敛后才能成为稳定合同。
- 当前差距:源码存在软删除和 slug 改名行为,但 UI 文案、恢复能力、保留周期和不可逆边界尚未形成一致、已审核的用户合同。
- 后续交付:先确认 Admin/Member 的目标更新权限、删除语义和 slug 是否永远不可改,再补齐 API schema、审计与真实 TEST 验收。
用户与权限
| 行为 | 当前 source evidence | 文档结论 |
|---|---|---|
| 创建 Workspace | authenticated user 的 POST 被允许 | 当前实现事实;是否需要实例配额或创建策略待决策。 |
| 查看 General Settings | Workspace 设置路由可访问,字段按当前 Workspace 渲染 | 读取必须绑定当前 active membership。 |
| 修改 name/logo/organization size/timezone | Web 仅 Admin 可操作 | 目标权限尚未批准;后端 Member 写权限是已知不一致。 |
| 删除 Workspace | Web 只向 Admin 展示删除区;后端 DELETE 要求 Admin | 删除前的依赖预览、恢复和数据保留合同待补。 |
Workspace ownership、Workspace Role 与资源级权限是不同事实。本页不把 owner 字段解释为绕过 Workspace Role 的万能权限,也不定义成员晋降级规则。
用户流程与系统响应
- 用户选择 Workspace,进入 General Settings。
- 页面显示 Logo、名称、Workspace URL、组织规模和时区;非 Admin 当前只能查看。
- Admin 提交更新后,客户端只发送可编辑基础字段,并在成功后刷新当前 Workspace read model。
- 名称校验失败、权限不足、Workspace 不存在或租户不匹配时应拒绝写入;不得在另一个 Workspace 上回退执行。
- 删除是独立高影响动作,不应由普通保存触发;目标合同需先展示影响并确认唯一 Workspace identity。
稳定状态、数据与 API
当前可核验的核心数据为 Workspace.id、name、slug、logo/logo_asset、owner、organization_size、timezone 及创建/更新/删除审计字段。slug 当前有全局唯一约束,name 最大长度与 slug 保留字由服务端模型/校验器控制。
实现提供 Workspace collection/item API 和 General Settings 更新服务;本页暂不冻结具体 URL、请求字段全集或错误码。稳定公共合同至少应保证:
- request 中的 Workspace slug 与资源 Workspace 一致;
- 更新只接受明确 allowlist 字段,不接受客户端改写 id、owner 或审计字段;
- 名称、slug、timezone 和上传资源在服务端复验;
- 并发更新、重复请求和删除中的 Workspace 返回可区分的稳定错误;
- 删除/恢复语义在被批准前不得由 UI 文案或模型实现单方面代签。
跨层依赖
- 成员与角色拥有 active membership、Workspace Role、邀请与离开规则。
- 部门拥有部门实体,不改变 Workspace identity。
- 项目管理消费 Workspace timezone 与 identity,但不拥有它们。
- 计费、集成、Webhook、导出和分析只能引用 Workspace,不得反向修改基础身份事实。
异常与停止条件
- Workspace 不存在、用户无 active membership、slug 与 resource id 不一致或权限不足时 fail closed。
- 名称/slug 冲突、非法 timezone、上传资源失败时不报告保存成功。
- 删除影响范围、恢复语义或数据保留未能证明时,停止在删除确认 gate;不得用普通更新替代。
- UI 与 API 权限不一致期间,以服务端拒绝为安全边界,但不能把当前较宽权限写成已批准目标。
验证与权威来源
当前实现核验入口:
- Web 路由:
apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/page.tsx - Web 表单:
apps/web/core/components/workspace/settings/workspace-details.tsx - 数据模型:
apps/api/plane/db/models/workspace.py - 权限与 API:
apps/api/plane/app/permissions/workspace.py、apps/api/plane/app/views/workspace/ - 前端类型:
packages/types/src/workspace.ts
这些路径是当前 source evidence,不是发布或 TEST evidence。Docusaurus build 只证明页面可构建。
待决策问题
- Workspace 基础设置的目标写权限是仅 Admin,还是 Admin + Member 的分级字段权限?
- slug 是否永久不可修改;若允许修改,旧链接、唯一性和审计如何处理?
- Workspace 删除是可恢复软删除还是不可恢复销毁,影响预览和保留期分别是什么?