菜单

工作区管理

相关源文件

本文档涵盖了 AFFiNE 的后端工作区管理系统,该系统负责工作区的创建、权限、团队功能和成员管理。本页重点介绍工作区功能的服务器端实现。有关前端工作区交互的信息,请参阅 前端架构

工作区管理概述

在 AFFiNE 中,工作区是文档和资源的容器,通过基于角色的访问控制提供协作功能。工作区管理系统负责:

  1. 创建和配置工作区
  2. 管理工作区成员和权限
  3. 处理邀请和访问请求
  4. 执行工作区配额和限制
  5. 支持特定于团队的功能

该系统使用基于角色的权限模型,具有不同的用户类型(所有者、管理员、协作者、外部用户),并提供直接邀请和可分享的邀请链接。

工作区管理架构

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts126-140 packages/backend/server/src/core/workspaces/resolvers/team.ts38-51 packages/backend/server/src/core/workspaces/resolvers/service.ts30-41

工作区创建和基本操作

创建工作区

工作区通过 GraphQL mutation 创建,该 mutation:

  1. 创建一个新的工作区条目
  2. 将创建者指定为工作区所有者
  3. 可选地初始化工作区内容

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts380-417

更新和删除工作区

系统提供用于更新工作区属性和删除工作区的 mutations,并进行适当的权限检查。

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts419-444

工作区权限模型

AFFiNE 的工作区权限模型基于角色,这些角色定义了用户在工作区内可以执行的操作。

工作区角色

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts95-119 packages/backend/server/src/core/workspaces/resolvers/team.ts258-291

权限操作

工作区权限被定义为一组操作字符串,这些字符串被映射到布尔值,指示用户是否可以执行该操作。这些权限通过 GraphQL 字段暴露给客户端。

系统将这些点表示法权限转换为 GraphQL 友好的下划线格式。

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts60-69 packages/backend/server/src/core/workspaces/resolvers/workspace.ts95-119

成员管理

成员邀请和接受

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts446-633 packages/backend/server/src/core/workspaces/resolvers/team.ts62-143 packages/backend/server/src/core/workspaces/resolvers/team.ts172-208

邀请方式

AFFiNE 支持多种邀请用户加入工作区的方式:

  1. 单封邮件邀请:通过电子邮件邀请一位用户。

  2. 批量邮件邀请:一次性邀请多位用户。

  3. 邀请链接:创建带有过期时间的、可分享的链接。

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts446-507 packages/backend/server/src/core/workspaces/resolvers/team.ts62-143 packages/backend/server/src/core/workspaces/resolvers/team.ts224-254

邀请流程

当用户被邀请加入工作区时:

  1. 系统创建一个带有适当状态的 WorkspaceUser 记录。
  2. 对于电子邮件邀请,状态最初为 Pending(待处理)。
  3. 对于链接邀请,状态为 UnderReview(审核中)。
  4. 如果达到配额限制:
    • 在团队工作区中:用户获得 NeedMoreSeat(需要更多席位)或 NeedMoreSeatAndReview(需要更多席位并审核)状态。
    • 在普通工作区中:会抛出错误。
  5. 会向相关方发送通知。

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts594-682 packages/backend/server/src/core/workspaces/resolvers/team.ts224-254

成员角色管理

工作区所有者和管理员可以:

  1. 调整成员角色:在管理员、协作者和外部用户之间更改成员的角色。
  2. 转移所有权:更改工作区的所有者。
  3. 移除成员:将用户从工作区中移除。
  4. 批准成员:批准通过邀请链接加入的用户。

来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts543-591 packages/backend/server/src/core/workspaces/resolvers/team.ts224-291

团队工作区

团队工作区为协作环境提供了扩展功能。通过添加 team_plan_v1 功能,可以将普通工作区升级为团队工作区。

团队工作区与普通工作区的区别

功能普通工作区团队工作区
角色调整仅支持所有权转移完整的角色管理
邀请链接基本支持高级支持
成员配额严格执行灵活,支持审核
批量邀请不支持支持
审核系统不可用可用

来源:packages/backend/server/src/core/workspaces/resolvers/team.ts53-60 packages/backend/server/src/core/workspaces/resolvers/team.ts258-291 packages/backend/server/src/core/workspaces/resolvers/service.ts117-121

团队特定功能

成员批准系统

团队工作区包含一个审核系统,用于处理通过邀请链接加入的新成员。

  1. 通过邀请链接加入的用户将进入“审核中”状态。
  2. 工作区管理员可以批准或拒绝这些成员。
  3. 批准后,成员将获得工作区的完全访问权限。
  4. 拒绝后,他们将被移出工作区。

来源:packages/backend/server/src/core/workspaces/resolvers/team.ts224-254 packages/backend/server/src/core/workspaces/resolvers/service.ts156-181

角色管理

团队工作区允许进行细粒度的角色管理,而不仅仅是转移所有权。

来源: packages/backend/server/src/core/workspaces/resolvers/team.ts256-291

配额管理

AFFiNE 工作区有成员配额,限制加入工作区的用户数量。配额系统在普通工作区和团队工作区中的工作方式不同。

配额执行

来源: packages/backend/server/src/core/workspaces/resolvers/workspace.ts635-682 packages/backend/server/src/core/workspaces/resolvers/team.ts62-143

按工作区类型划分的配额行为

  1. 普通工作区:

    • 严格执行配额
    • 超出配额时,邀请将被拒绝并附带错误信息
    • 无溢出机制
  2. 团队工作区:

    • 灵活的配额执行
    • 超出配额时,邀请将被接受,但具有特殊状态
    • 用户可能处于待定状态:NeedMoreSeatNeedMoreSeatAndReview
    • 当配额增加时,用户将根据先到先得(FIFO)的顺序自动升级

来源: packages/backend/server/src/core/workspaces/resolvers/workspace.ts635-682 packages/backend/server/src/__tests__/team.e2e.ts255-307

通知系统

工作区管理系统会发送各种通知,让用户了解工作区的活动

事件收件人通知类型
用户被邀请被邀请者电子邮件邀请
接受邀请邀请者接受邀请通知
加入请求(邀请链接)管理员/所有者审核请求通知
批准加入请求请求者批准审核通知
拒绝加入请求请求者拒绝审核通知
成员被移除被移除的成员成员移除通知
角色变更成员角色变更通知
所有权转让旧所有者和新所有者所有权转让通知

来源: packages/backend/server/src/core/workspaces/resolvers/service.ts94-294

与其他系统集成

工作区管理系统集成了AFFiNE 的其他几个系统

  1. 文档系统:工作区包含具有自身权限模型的文件
  2. 用户系统:工作区引用用户及其属性
  3. 存储系统:工作区具有用于内容的关联存储
  4. 通知系统:工作区事件触发通知
  5. 配额系统:工作区有成员和存储配额

这些集成确保工作区操作正确执行权限并在整个平台中保持一致性。

来源: packages/backend/server/src/core/workspaces/resolvers/workspace.ts36-53 packages/backend/server/src/core/workspaces/resolvers/service.ts32-40