
语言 🇨🇳 简体中文
背景
实现
什么是访问控制? 
通过 FastComments SSO 访问控制(有时称为 RBAC),可以限制用户仅访问某些页面或评论线程。此外,用户只能在相同组内相互 @mention。
详细说明
我们可以将 Users 和可选的 Pages 放入组中。
当 Users 被放入组中,并且在小部件设置中启用了 Limit Comments by SSO User Groups 时,用户将只能看到来自其相同组中用户的评论,并且只能 @mention 相同组中的用户。
此外,Pages 也可以被分配到组中,那么用户只能访问他们有权限访问的页面的评论。
我们称之为“用户级别”组与“页面级别”组。
那么哪一种适合您?
如果符合以下情况,请使用用户级别组...
- 您希望使用相同的
urlId值(页面 URL,或文章 ID),但按组限制评论。 - 例如,您希望有“新用户”和“资深用户”两个组,并且他们在相同页面上永远看不到对方的评论。
如果符合以下情况,请使用页面级别组...
- 您的组有特定的页面。
- 例如,属于“公开页面”组的用户永远不应查看“绝密”文章。
工作原理 
FastComments 访问控制通过将 Pages 和 Users 分配到所需的组来工作。
组只是一个字符串标识符,例如 GREEN 或 abc-123。
Users 和 Pages 不仅限于一个组。它们分别限制为 100 和 1000 个组。
访问未授权页面
如果用户尝试访问他们无权访问的页面,将看到如下错误消息:
该消息文本可自定义。
规范 
定义多个用户如何交互并进行测试是很复杂的。以下是我们用于访问控制的规范,您可以使用它来测试您的实现:
页面 的 group ids 为 null,用户 的 group ids 为 null - 应该有访问权限。
页面 的 group ids 为 null,用户 有 group ids - 应该有访问权限。
页面 有 group ids,用户 的 group ids 为 null - 应该有访问权限。
页面 有 group ids,用户 的 group ids 为 empty list - 不应该有访问权限。
页面 有 group ids,用户 有 group ids - 存在交集 - 应该有访问权限。
页面 有 group ids,用户 有 group ids - 不存在交集 - 不应该有访问权限。
页面 的 group ids 是 empty list(无人有访问权限),用户 为 null - 不应该有访问权限。
SSO User A = No group ids defined (null = full access).
SSO User B = No group ids defined (null = full access).
A can @B.
SSO User A = No group ids defined (null = full access).
SSO User B = Group ids defined.
A can @B.
SSO User A = Group ids defined.
SSO User B = No group ids defined (null = full access).
A can @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [b].
A can NOT @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [a, b].
A can @B.
实现 
在其他组中提及用户
如果两个用户属于两个不同的组集合,且没有交集,他们将无法相互 @mention。
如果用户手动输入 @mention 并提交评论,它将保持为纯文本。另一位用户不会被标记。
管理组
Groups 是分别使用 Pages 和 SSOUsers API 资源定义的。
可以调用 Pages API 来定义被允许访问该页面的组集合。默认情况下,所有组,和不
属于任何组的用户,都有访问权限。
同样,可以调用 SSOUsers API 来定义与每个用户关联的组。
对于这两个资源,设置或更新组的时间没有限制。
如果仅希望限制用户相互 @mention,那么 Pages 无需被考虑。
注意!
定义和更新 SSO 用户组不需要使用 API,而可以通过在传递给评论小部件的 SSO payload 中定义 group ids 来自动更新。然而,对于大量的组列表,这不建议,因为用户 必须为每次页面加载提交此 payload。
示例 API 调用 
在这里我们将演示如何调用 FastComments API 来设置访问控制。
在开始之前,请注意我们不必显式创建一个 Group 结构。组只是添加到 Users 和 Pages 的标识符。将组添加到用户或页面会自动“创建”该组。
首先,让我们创建两个用户,User A 和 User B,并将他们初始放入 Group X:


现在让我们创建一个 Page。我们将其命名为 Confidential Page,并且到目前为止这些用户都无法访问它,因为它将属于组 CONFIDENTIAL:

Users A and B 当前 不 能访问该新页面。然而,由于他们在同一组 GROUP-X 中,他们可以互相 @mention。
让我们更新 User B,使其现在可以访问该页面:

User B 现在属于两个组。我们的用户仍然可以互相 @mention,但只有 User B 可以查看我们的机密页面。
让 User B 仅能查看该机密页面:

现在他们可以查看机密页面,但我们的任一用户都无法互相 @mention,因为他们属于不同的组。
然而,任何不在访问控制范围内的用户 仍然可以访问我们的页面。为防止这种情况,请确保没有 SSO 用户将其 groupIds 设置为 null。例如,让我们创建一个可以访问所有内容的 User C:

通过将 groupIds 设置为 null,我们表示他们不受访问控制的限制。
现在,让我们创建一个所有人都可以访问的页面:

通过将 accessibleByGroupIds 设置为 null,我们表示此 Page 不受访问控制的限制,两个用户都可以访问它。
这就完成了关于访问控制的 API 演练。