Skip to main content

成员与角色

Asset
ADP-PLN-FEAT-DOC-0054
Feature
workspace-members-and-roles
领域
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

BLOCKED
development · not ready
  • 原子需求与验收
  • 设计与工程合同
  • 代码与仓库定位
  • 里程碑与工作包
  • 验证计划
  • 无阻断决策
verification · not ready
  • Development Ready 已通过
  • 验收标准已覆盖
  • 正式测试已登记
  • Fixture 与环境已定义
  • 测试规格已物化到正式测试
release · not ready
  • Verification Ready 已通过
  • 实现修订可定位
  • 发布证据已登记
  • 兼容与迁移已定义
  • Runbook 与回滚已定义
查看阻断项(5)
  • Development Ready 缺少:原子需求与验收
  • Development Ready 缺少:设计与工程合同
  • Development Ready 缺少:代码与仓库定位
  • Development Ready 缺少:里程碑与工作包
  • Development Ready 缺少:验证计划

功能目标​

在一个 Workspace 内管理成员邀请、active membership 与 Workspace Role,并在离开、移除和角色变化时保护最低管理员覆盖和 Project 访问一致性。

功能结论​

主题当前结论
用户Workspace Admin 管理邀请、角色和移除;Admin/Member 使用当前成员设置页;成员可显式离开。
入口/{workspaceSlug}/settings/members,支持搜索、角色筛选、部门筛选、成员活动和邀请入口。
可见结果成员列表显示人员、Workspace Role、部门、active 状态等当前字段;Admin 可邀请并执行管理操作。
当前系统保证Workspace Role 为 Admin(20)、Member(15)、Guest(5);membership 与 Workspace 绑定;退出/移除采用 inactive,而非把历史成员事实静默抹除。
明确不做Workspace Role 不等于 Project Role、部门角色、Producer approval 或 AI Agent identity。
权威 owner本页拥有 Workspace membership 与基础角色;主部门由部门成员页拥有,Project access 由项目成员页拥有。

当前落地状态、已批准合同与差距​

  • 当前落地状态:成员设置页允许 Workspace Admin/Member 查看,Guest 当前看到未授权页;只有 Admin 显示邀请按钮。API 支持列出/读取成员、Admin 修改角色与部门、Admin 移除以及成员自行离开。
  • 已批准合同:Workspace Role、Project Role 与部门角色是分离的授权轴;部门不能替代 Workspace Role。
  • 当前差距:UI 可见范围、API list/retrieve 对 Guest 的允许范围并不一致;Guest 能看到哪些成员字段需要明确批准。
  • 当前差距:邀请过期、重复邀请、重新激活、批量失败、审计可见性和最后管理员规则还没有统一成为长期合同。
  • 后续交付:以服务端角色矩阵为基线整理 invite/accept/update/remove/leave 全流程,再补真实 TEST 的正负向权限 evidence。

角色与权限​

Workspace Role当前可核验行为不自动获得
Admin邀请;修改其他成员角色/部门;移除成员;查看管理信息任意 Project 的业务权限、Producer approval。
Member当前 Web 可进入成员设置并查看/筛选;可自行离开邀请、修改角色、移除他人、Workspace 基础设置的稳定写权。
GuestAPI 层存在受限成员读取;当前 Web 成员设置页拒绝Member/Admin 写能力,未加入 Project 的访问。

角色值是当前实现枚举,不意味着数值本身应成为外部 API 的永久业务语义。稳定合同应使用命名角色并由 server 映射。

邀请、加入、变更与离开​

  1. Admin 打开邀请入口,提交 email、role,并可在当前实现中预设 department。
  2. 服务端创建邀请;接受后产生 active WorkspaceMember。邀请与身份账号是不同对象。
  3. Admin 可修改目标成员角色;当前 API 禁止用户修改自己的角色。
  4. 将成员降为 Guest 时,当前后端会把该成员的 Project membership role 同步降为 Guest;该跨层副作用需要单独审核,不能默认为最终合同。
  5. Admin 移除成员时,Workspace membership 和其 active Project memberships 被置为 inactive;历史活动与 creator/actor 不应改写。
  6. 成员可自行离开;如果其是 Workspace 唯一 Admin,或在某些 Project 中是唯一 Admin,当前后端拒绝离开。

移除他人和自行离开是两个显式动作。不得把角色改为 Guest 当作离开,也不得以删除账号替代 membership 失效。

稳定状态、数据与 API​

当前核心对象包括 WorkspaceMember、WorkspaceMemberInvitation 及 member/workspace/role/is_active/department/preferences/created_at 等字段。管理 API 当前提供 member collection/item、邀请、leave、当前用户 membership、批量部门调整和 Project membership 查询。

目标公共合同至少需要:

  • role、active status 和 Workspace identity 服务端校验;
  • invite 重复、已接受、过期与撤销可区分;
  • update/remove/leave 对同一成员并发时有确定结果;
  • 最后 Workspace Admin 和最后 Project Admin 保护不依赖 UI;
  • 成员失效后的 Project membership、部门关系和历史 actor 处理可解释;
  • 列表按调用者角色裁剪字段,不能仅靠前端隐藏敏感信息。

跨层依赖与单一 owner​

  • 部门成员与角色拥有主部门、调岗历史和部门角色;本页只引用当前 department 摘要。
  • 成员与访问拥有 direct Project membership 与 Project Role。
  • 账号停用、登录与个人资料由账号与身份 Feature 持有,不由 Workspace membership 替代。

异常与停止条件​

  • 跨 Workspace member id、inactive actor、权限不足或目标成员不存在时 fail closed。
  • 用户修改自己角色、移除高于 actor 的角色、最后 Workspace Admin/Project Admin 离开时拒绝。
  • 邀请部分失败必须返回逐项结果,不得把部分成功报告为全部成功。
  • 角色变化会影响 Project membership 时,若影响无法预览或 owner 无法解释,应停止高影响写入。

验证与权威来源​

  • Web 路由:apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
  • Web 列表:apps/web/core/components/workspace/settings/members-list*.tsx
  • API:apps/api/plane/app/views/workspace/member.py
  • 权限:apps/api/plane/app/permissions/workspace.py、apps/api/plane/app/permissions/base.py
  • 模型与类型:apps/api/plane/db/models/member.py、packages/types/src/workspace.ts

源码核验不证明当前生产已部署,也不替代邀请邮件、权限负向或历史保留的 TEST evidence。

待决策问题​

  1. Guest 是否可以看到 Workspace 成员列表;若可以,字段裁剪到什么范围?
  2. Workspace 角色降低是否应自动降低 Project role,还是进入影响预览与显式确认?
  3. 邀请重发、过期、撤销、批量部分成功和成员重新激活的稳定状态机是什么?