Groups API - 手动同步组成员资格?

我似乎把自己逼到了死角……

我有一个会员网站(也是基于 Rails 构建),并使用 Discourse API 自动创建和填充所有用户组对应的受限论坛组。这运行得非常好;我甚至为每个组创建了一个 wiki 帖子作为起点。(我已发布了我的代码。)

现在,我遇到了一个问题:有时我需要手动同步组成员资格,例如当在我的网站上合并组,或者协调员意外通过论坛删除/添加了人员时。为此,我想删除 Discourse 组中的所有成员,然后重新添加应该属于该组的成员。

第一个问题:Discourse API 似乎没有提供“删除所有组成员”的接口,因此我必须指定要删除的每个人的名称。

第二个问题:我无法实际获取 Discourse 组当前的成员列表,因为不知何故,它要求我提供组的名称而不是 ID。在我的网站上,我只存储了组的 ID,因为 Discourse 在相关的 PUT/POST/DELETE 请求中使用的是 ID。

第三个问题:这应该很明显,但我找不到一种方法可以通过提供组的 ID 来获取其名称,除非我想获取所有 200 多个组并逐个遍历,直到找到 ID 匹配的那个。这似乎是非常繁琐的操作,也违背了 Rails 的惯例。

我遗漏了什么?

编辑:@codinghorror 上次提供了很大帮助——这次有什么建议吗?

4 个赞

我不太确定,但也许 @justin@blake 可以在他们接下来的工作周里查看一下这个问题?

4 个赞

你在这点上似乎是对的——你无法通过 ID 数字访问组资源,只能通过名称访问。

这里引用的 ID 实际上不是 ID,而是名称,参见

/g/<group-name> 路由重构以匹配我们目前处理主题和分类的方式可能是合理的。例如 /g/<group-name>/<id>/g/patrons/41,并允许 /g/41 以相同的方式工作。

不过,在我们修复这个问题之前,看来实现你所需功能的唯一方法是:

  1. 在 ID 旁边存储组名称
  2. 使用 GET 请求访问 g/<group-name>/members.json 以获取成员列表
  3. 遍历这些成员以逐个删除,以便重新同步。
3 个赞

这是一个非常棒的问题,值得深入探讨。感谢提出,@Judith!群组功能非常强大,潜力巨大!:rocket: 我最近也在关注这个问题,特别是在从 WordPress 维护群组成员资格方面。如果能在新用户注册或更新 WordPress 个人资料时,根据他们所在的国家/地区、语言、感兴趣的主题等信息,自动将他们添加或移除出相应群组,那将非常实用。

@justin 提出的同时存储群组名称和群组 ID 的建议非常好,我会将此反馈给正在开发此集成功能的团队。

此外,我还希望能在用户界面中增加一项功能:允许管理员或群组所有者批量移除群组中的所有成员,然后重新添加。这样,即使没有自动系统来根据用户在 WordPress 中的个人资料更新自动添加或移除成员,他们也可以定期通过从 WordPress 导出的数据手动重置群组成员资格。

3 个赞

我建议在您的主网站和 Discourse 之间使用 SSO(单点登录)。这样您就能免费获得群组成员管理功能,并且拥有一个 sync_sso 端点,可以以直接的方式更新成员资格。

4 个赞

起初我只使用 SSO,但后来遇到了一个问题:它仅在用户登录时更新组成员身份。对于那些不再连任、或因其他原因失去访问群组权限、或获得访问群组权限(并应收到受限群组子论坛消息的电子邮件通知)的用户,我需要通过 API 手动添加或移除他们。

1 个赞

sync_sso 的存在正是为了解决这个问题!每当组成员身份发生变化时,你可以触发一次相当于“虚拟”SSO 登录的操作,以完全同步用户数据。

6 个赞

嘿!

此功能现在可用了吗?有这方面的更新吗?

谢谢!

1 个赞

有任何更新吗?@tobiaseigen

1 个赞