本文档涵盖了 AFFiNE 的后端工作区管理系统,该系统负责工作区的创建、权限、团队功能和成员管理。本页重点介绍工作区功能的服务器端实现。有关前端工作区交互的信息,请参阅 前端架构。
在 AFFiNE 中,工作区是文档和资源的容器,通过基于角色的访问控制提供协作功能。工作区管理系统负责:
该系统使用基于角色的权限模型,具有不同的用户类型(所有者、管理员、协作者、外部用户),并提供直接邀请和可分享的邀请链接。
来源: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:
来源: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 支持多种邀请用户加入工作区的方式:
单封邮件邀请:通过电子邮件邀请一位用户。
批量邮件邀请:一次性邀请多位用户。
邀请链接:创建带有过期时间的、可分享的链接。
来源: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
当用户被邀请加入工作区时:
WorkspaceUser 记录。Pending(待处理)。UnderReview(审核中)。NeedMoreSeat(需要更多席位)或 NeedMoreSeatAndReview(需要更多席位并审核)状态。来源:packages/backend/server/src/core/workspaces/resolvers/workspace.ts594-682 packages/backend/server/src/core/workspaces/resolvers/team.ts224-254
工作区所有者和管理员可以:
来源: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
团队工作区包含一个审核系统,用于处理通过邀请链接加入的新成员。
来源: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
普通工作区:
团队工作区:
NeedMoreSeat 或 NeedMoreSeatAndReview来源: 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 的其他几个系统
这些集成确保工作区操作正确执行权限并在整个平台中保持一致性。
来源: packages/backend/server/src/core/workspaces/resolvers/workspace.ts36-53 packages/backend/server/src/core/workspaces/resolvers/service.ts32-40