将现有用户(并邀请新用户)添加到群组

我有一个特定的使用场景,想知道是否有更简便的方法来实现。

  • 并非所有通过我们 SSO 的用户都拥有活跃的论坛账户
  • 我们定期需要将用户添加到某个论坛群组,以授予其访问私有论坛的权限
  • 在尝试将用户添加到群组之前,无法确定他们是否拥有活跃的论坛账户

例如
每月,工作人员会有一份包含 100 多个账户的名单,这些账户有资格访问私有论坛。这些账户拥有 SSO 用户名和电子邮件地址,但可能尚未注册论坛账户。

:question: 是否有一种简单的方法,可以为已有论坛账户的用户直接添加到群组,并为没有账户的用户发送邀请(自动将其加入群组)?

在“群组”页面,“添加成员”按钮允许粘贴逗号分隔的用户名列表。当用户名有效时,用户会被添加到群组;如果用户名无效(即尚未拥有论坛账户),操作会失败,用户也不会被添加。

除了手动检查成功添加到群组的用户列表,识别哪些用户名未能添加,然后向这些人发送论坛邀请(例如:https://meta.discourse.org/t/multiple-use-invite-links/154325)之外,是否有一种简单的方法可以将“邀请”和“添加到群组”结合起来,同时处理现有用户和潜在用户?

理想情况下,我希望找到一种一步到位的方法。

一个可能的(但依然非常笨拙!)多步骤变通方案可能是:

  1. 在数据浏览器查询中输入名称列表,该查询将返回活跃和非活跃用户名的列表
  2. 对活跃用户名列表使用“添加到组”功能
  3. 向所有非活跃用户发送自定义邀请链接

如果有办法简化这一流程,我非常乐意听取建议 :slight_smile:

您无法使用数据探索器。它是一个只读工具。

类似的功能需要重新创建。

您是否研究过使用 SSO 参数 add_groupsremove_groups 将用户添加到 Discourse 群组?对于在您 SSO 提供商站点上已存在的用户,您可以为他们创建 Discourse 账号,并通过调用 sync_sso 路由的 API 将他们添加到 Discourse 群组。有关设置此功能的详细信息,请参阅:使用 sync_sso 路由同步 SSO 用户数据。如果这种方法对您可行,我们可以为您提供更详细的设置指导。

1 个赞

谢谢 Simon,这看起来很有希望。

我们所有用户都存在于 SSO 站点上(他们是我们在市场中的卖家),但目前只有其中一部分会创建 Discourse 账户来使用我们的论坛。该 SSO 同时涵盖客户和卖家:我们不希望为所有客户自动创建 Discourse 账户(数量实在太多了!),但如果为所有卖家这样做,将大大简化流程。

在这种情况下,我们需要仅在特定卖家开始使用特定市场或服务时,才授予他们访问私有论坛组的权限。

例如:Marketplace 1 的卖家拥有一个 SSO 账户。他们可能会在此阶段通过登录论坛来创建 Discourse 账户。

之后,该卖家获得对 Marketplace 2 的访问权限,其 SSO 账户将记录这一变更。我们为该市场设置了自定义用户组(以及私有论坛分类)。

  • 如果此时他们已有 Discourse 账户,我们需要更新其所属组别,以便他们能够访问私有论坛区域。
  • 如果此时他们尚未拥有 Discourse 账户,我们希望为他们创建一个账户,并赋予相应的组别权限。

目前团队使用“添加到组”功能,并传入逗号分隔的用户名列表。如果用户已有 Discourse 账户,他们将获得该组的访问权限;如果尚未在论坛上注册,则此操作无效。

为了捕获自上次批量添加用户到组以来新创建 Discourse 账户的用户,团队通常会在更新组成员资格时包含过去 X 个月内所有符合条件的用户名,这是一个相当繁琐的流程。

如果您向 sync_sso 路由发起 API 调用,并在其中包含 add_groups SSO 参数,现有用户将被添加到相应群组。如果用户尚未拥有 Discourse 账户,系统将为其创建账户并将其添加到该群组。您也可以类似地使用 remove_groups SSO 参数将用户从群组中移除。使用 sync_sso 路由的另一大优势是,无需用户退出并重新登录 Discourse,更改即可生效。

如果您的团队需要参考一些 PHP/WordPress 示例代码,可以查看此处实现:https://github.com/discourse/wp-discourse/blob/master/lib/utilities.php#L378。我链接的文件包含了一些实用函数,网站可使用这些函数来扩展 WP Discourse 插件。这也是它采用静态函数的原因。

4 个赞

谢谢西蒙!听起来很理想——比我们目前的方法好多了 :slight_smile:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.