菜单

协作功能

相关源文件

本文档全面概述了 AFFiNE 的实时协作功能,包括工作区共享、权限管理和协作编辑。有关身份验证和用户管理的信息,请参阅相关的后端架构部分。

概述

AFFiNE 提供强大的协作功能,使用户能够共同处理共享的工作区。该系统支持实时协作编辑、基于权限的访问控制以及邀请和管理工作区成员的各种方法。

主要的协作功能包括:

  • 具有用户在线状态指示器的实时协作编辑
  • 具有基于角色的权限的工作区共享
  • 具有高级协作功能的工作区团队
  • 支持电子邮件邀请和可共享链接的邀请系统
  • 文档级别的权限控制

来源

协作架构

AFFiNE 的协作功能构建在分布式架构之上,该架构支持跨多个客户端的实时同步。

协作系统由几个关键组件组成:

  1. Y-Provider:Yjs 的包装器,Yjs 是一个 CRDT(无冲突复制数据类型)实现,通过自动处理冲突和合并更改来实现实时协作。

  2. NBStore:一个本地存储模块,用于在本地持久化协作文档数据。

  3. WorkspaceResolver & TeamWorkspaceResolver:GraphQL 解析器,处理工作区操作,包括成员管理和权限。

  4. AccessController:处理所有操作的权限检查。

  5. WorkspaceService:管理与工作区相关的业务逻辑,包括邀请和通知。

来源

工作区权限和角色

AFFiNE 为工作区实施了一个基于角色的权限系统,该系统控制成员可以执行的操作。

角色层级

  1. 所有者:拥有对工作区的完全控制权,包括删除工作区和转移所有权。

  2. 管理员:可以管理工作区的绝大部分方面,包括用户和设置。

  3. 协作者:可以创建、编辑和删除文档,但管理能力有限。

  4. 外部人员:访问权限有限,通常为只读权限。

权限检查

权限检查由 AccessController 服务执行,该服务验证用户是否对工作区或文档执行特定操作的权限。

来源

邀请系统

AFFiNE 提供多种方式邀请用户协作工作区。

电子邮件邀请

用户可以通过电子邮件直接邀请。

团队工作区可以生成带有过期时间的邀请链接。

  1. 创建链接:工作区所有者/管理员可以创建在设定时间后(例如一天、一周)过期的邀请链接。

  2. 接受链接:当用户打开邀请链接时,他们可以加入工作区,但需遵守配额限制。

  3. 审批流程:对于团队工作区,新成员可能需要审批,尤其是在工作区已达到成员配额时。

批量邀请

团队工作区支持一次性邀请多个用户。

来源

团队工作区功能

团队工作区提供为组织设计的增强协作功能。

成员配额管理

团队工作区具有可配置的成员上限。

成员审批流程

团队工作区实施了新成员的审批流程。

  1. 审核中:当成员通过邀请链接加入时,他们可能处于“审核中”状态。

  2. 管理员审批:工作区管理员可以批准或拒绝待处理的成员。

  3. 配额管理:当成员数量超出限制时,管理员可以升级工作区配额或管理现有成员。

团队成员管理

团队成员管理的附加功能包括:

  • 角色分配:管理员可以为团队成员分配不同的角色。
  • 批量操作:支持批量邀请和操作。
  • 成员移除:可以撤销团队成员访问权限。

来源

实时协作

AFFiNE 支持用户之间的实时协作,允许多人同时编辑同一文档。

同步架构

关键协作功能

  1. 实时编辑:一位用户所做的更改会立即对其他协作者可见。

  2. 用户在线状态:系统显示谁当前正在编辑文档以及他们光标的位置。

  3. 内容同步:所有文档元素都会同步,包括:

    • 文本内容
    • 图像和 SVG 文件
    • 集合和组织结构
  4. 冲突解决:使用 Yjs 的 CRDT 方法,冲突会自动解决,无需手动干预。

来源

文档级别权限

除了工作区级别的权限之外,AFFiNE 还支持文档特定的权限控制。

文档角色

  • 经理:对文档拥有完全控制权,包括管理权限。
  • 编辑者:可以编辑文档内容,但不能更改权限。
  • 读者:对文档拥有只读访问权限。

权限覆盖

文档权限可以覆盖工作区权限,允许更精细化的访问控制。

文档共享

文档可以被共享:

  1. 与工作区成员共享:授予工作区成员特定权限。

  2. 公开共享:使文档可供非成员访问。

来源

成员管理前端

前端提供了用于管理工作区成员的组件和服务。

关键组件

  • WorkspaceMembersService:处理与工作区成员相关的​​前端操作。
  • WorkspacePermissionService:管理与权限相关的​​操作。
  • MemberSearchService:提供成员搜索功能。

权限管理

前端使用 GraphQL 与后端权限系统进行交互。

来源

国际化支持

AFFiNE 的协作功能支持国际化,以适应全球团队。

  • 支持协作 UI 元素的多种语言
  • 使用 Crowdin 进行翻译工作流
  • 自动同步翻译平台上的翻译

这确保了用户无论其偏好语言如何,都能使用协作功能。

来源

实现示例

协作编辑测试

以下测试演示了实时协作的实际操作方法

此测试说明了

  1. 两个用户连接到同一工作区
  2. 内容更改的实时同步
  3. 协作期间显示用户在线状态信息

来源

团队成员邀请和批准

此测试展示了工作流程,包括

  1. 创建邀请链接
  2. 新用户接受邀请
  3. 成员状态显示为“待审核”
  4. 工作区所有者批准新成员
  5. 发送通知以确认批准

来源