线程认证
线程认证用于在协作文档中强制执行线程和评论的所有权规则。启用后,用户只能编辑和删除自己的线程和评论,线程创建时会自动分配认证用户的 ID。
需要 JWT 认证
线程认证依赖于JWT 认证来识别用户。请确保您的 JWT 包含带有唯一用户标识符的 sub 声明。
启用线程认证
通过 设置 API 将 thread_authenticator 设置为 1 来启用线程认证:
curl --location --request PUT 'https://YOUR_APP_ID.collab.tiptap.cloud/api/admin/settings/thread_authenticator' \
--header 'Authorization: YOUR_SECRET_FROM_SETTINGS_AREA' \
--header 'Content-Type: text/plain' \
-d '1'在自托管实例中,您也可以将环境变量 COLLAB_THREAD_AUTHENTICATOR 设置为 1。
工作原理
启用后,线程认证器会拦截所有修改线程或评论的文档更新,并根据认证用户身份进行验证。
自动分配用户 ID
当用户创建线程或评论时,认证器会自动将用户 ID(来自 JWT 的 sub 声明)分配给线程和评论。这是透明处理的,不需要任何客户端更改。
所有权强制执行
以下规则适用于所有线程和评论操作:
| 操作 | 规则 |
|---|---|
| 创建线程 | 允许。自动分配已认证用户的 ID。 |
| 编辑线程 | 仅线程所有者可编辑。 |
| 删除线程 | 仅线程所有者可删除。 |
| 解决/取消解决线程 | 所有者始终可解决。非所有者权限取决于访问级别(见下文)。 |
| 创建评论 | 允许。自动分配已认证用户的 ID。 |
| 编辑评论 | 仅评论所有者可编辑。 |
| 删除评论 | 仅评论所有者可删除。 |
若用户尝试未授权操作,服务器将拒绝更新并返回未授权错误。
没有用户 ID 的线程
在启用线程认证之前创建的线程和评论可能没有分配用户 ID。这些线程和评论可以被任何人编辑或删除。一旦用户修改了此类线程,他们的用户 ID 将被分配给该线程。
解决非本人线程
默认情况下,所有有写入或评论访问权限的用户均可解决非自己拥有的线程。这对于审核者或编辑者需要将讨论标记为已解决的工作流程很有用。
若要禁止仅有评论权限的用户解决他人线程,请将 commentonly_disallow_resolve_foreign_threads 设置为 1:
curl --location --request PUT 'https://YOUR_APP_ID.collab.tiptap.cloud/api/admin/settings/commentonly_disallow_resolve_foreign_threads' \
--header 'Authorization: YOUR_SECRET_FROM_SETTINGS_AREA' \
--header 'Content-Type: text/plain' \
-d '1'解决非本人线程的权限矩阵如下:
| 访问级别 | 默认行为 | 设置 commentonly_disallow_resolve_foreign_threads=1 |
|---|---|---|
| 写入访问 | 可以解决 | 可以解决 |
| 仅评论访问 | 可以解决 | 不允许解决 |
线程所有者无论此设置如何,总能解决自己的线程。
配置参考
| 设置 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
thread_authenticator | COLLAB_THREAD_AUTHENTICATOR | 0(禁用) | 设置为 1 以启用线程认证。 |
commentonly_disallow_resolve_foreign_threads | COLLAB_COMMENTONLY_DISALLOW_RESOLVE_FOREIGN_THREADS | 0(允许) | 设置为 1 以阻止仅评论用户解决非自有线程。 |
这两个设置可通过 设置 API 或环境变量进行配置。