Skip to main content

成员与访问

Asset
ADP-PLN-FEAT-DOC-0033
Feature
project-members-and-access
领域
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 缺少:验证计划

功能目标​

管理 Project membership、Project Role 与默认成员设置。Active Project membership 是当前部门 v1 的 Project 访问事实。

功能结论​

主题当前结论
用户Project Admin 管理 direct members;Project Admin/Member 与 Workspace Admin 当前可进入成员设置页。
入口/{workspaceSlug}/settings/projects/{projectId}/members。
可见结果查看 Project 成员和角色、默认成员设置、teamspace 关联;执行添加、角色变更、移除或自行离开。
当前系统保证Project Role 为 Admin(20)、Member(15)、Guest(5);ProjectMember 必须绑定 Project/Workspace/member;inactive membership 不参与当前访问。
明确不做Project membership 不由负责部门归属、Workspace Role、部门角色或 Producer approval 推导或替代。
权威 owner本页拥有 Project membership、Project Role 与当前 Project 访问 eligibility。

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

  • 当前落地状态:当前 API 支持 Project member list/retrieve/create/update/remove/leave 和个人偏好;Web 设置页展示 defaults、teamspace 与 direct member list。
  • 已批准合同:Project membership 是当前 Project 访问事实;不同层级角色不互相替代,负责部门归属不授予 Project 访问。
  • 当前差距:Web 页面允许 Project Member 或 Workspace Admin 进入,但添加/移除/角色变更的按钮与 API 内部检查并非一份集中角色矩阵,需收敛为一致且可测试的合同。
  • 后续交付:先固定 Project membership 与 role guard;不得用部门归属写回、替代或扩大 Project membership。

Project membership 与角色​

ProjectMember 当前保存 project、workspace、member、role、is_active、preferences、sort_order 和审计字段;同一 active project/member 组合唯一。

行为当前 source evidence
添加成员Project Admin;目标必须先是 active Workspace member。
查看成员Project Admin/Member/Guest API 可读取,Guest 响应字段更受限。
修改角色接口先验证 actor、目标角色、目标 Workspace Role 与自身角色层级。
移除成员Project Admin;不能用 remove API 移除自己,也不能移除更高角色。
自行离开所有 Project roles 可请求;唯一 Project Admin 不能离开。

当前实现对 Workspace Admin 的旁路与普通 Project actor 的等级判断有特殊分支;这些是需要测试固定的实现事实,不应通过数值比较推断更多隐式权限。

访问来源与有效访问​

当前 Project membership 是已落地的 Project 访问事实。目标 read model 必须区分:

  • membership:由 Project Admin 显式添加、重新激活,或由独立 Project 访问 owner 投影为可解释来源;
  • workspace/network:Project 列表可发现性,不自动等同 Project role;
  • role:Admin / Member / Guest 等 Project 内行为权限。

部门主归属、部门角色或负责部门不能创建、提升、降低或删除 Project membership;若存在独立 Department Grant/Projection 能力,它只负责产生可解释的 Project membership/provenance,不改变部门工作项负责归属规则。

用户流程与系统响应​

  1. Project Admin 打开成员设置,选择 active Workspace member 与目标 Project Role。
  2. 服务端复验 Workspace membership、Project identity、角色上下界和重复 membership。
  3. 已 inactive 的同一成员可被重新激活或更新;操作结果必须保持单一 active membership。
  4. 角色变更不能提升到 actor 无权授予的等级,也不能绕过 Workspace role 的硬边界。
  5. remove 将 membership 置 inactive;leave 由当前用户显式触发并保护最后 Admin。
  6. 成员变化对 assignee、负责部门、pending workflow 或 Automation 不做静默重写,由对应 owner 处理风险。

数据、API 与并发​

目标稳定合同至少需要:

  • project/workspace/member 三者同租户,目标用户为 active Workspace member;
  • add/reactivate/update/remove/leave 具备确定的重复请求结果;
  • 角色变更使用 expected membership version 或等价条件写;
  • 最后有效 Project Admin 保护基于当前 active Project membership;
  • 列表响应明确 Project membership 与 role,未落地来源不得伪装;
  • member 失效时,工作项 assignee、部门路由和审批只标风险或进入显式处理,不自动改写历史。

跨层依赖​

  • Workspace 成员与角色提供 active Workspace membership 和上层角色。
  • 分配与责任只能从有效 Project candidates 选择 assignee,不能自行授予访问。
  • 项目管理拥有 Project network;network 只影响可发现性/进入策略,不成为无来源的 direct role。

异常与停止条件​

  • 非 Workspace member、跨 Workspace member id、inactive Project、权限不足或角色越权时 fail closed。
  • 唯一 Project Admin leave/remove、并发角色冲突或 provenance 不可解释时停止。
  • 成员移除会使开放工作项或审批失去有效负责人时,返回影响/风险,不静默重分。

验证与权威来源​

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

真实验收需覆盖 Admin/Member/Guest、Workspace Admin、leave/remove 并发和最后管理员保护。

待决策问题​

  1. Workspace Admin 是否无需 direct Project membership 即可执行全部成员管理动作?
  2. Project Member 对成员设置的可见字段和允许动作应到什么范围?
  3. 最后 Project Admin 保护在 Workspace Admin 旁路与 Project direct membership 共存时如何计算?