层次群组成员(组内组)

对于我们的跑步俱乐部,我正在协调一项为期一年的挑战活动,其中包含团队环节。针对每个10岁年龄段的团队,我正在创建一个 Discourse 群组,以便可以@提及他们,并可能开展他们自己的讨论,不过我怀疑很少有人能发现这一点。因此,我为每个年龄段团队创建了七个群组,并且必须随着人员注册手动更新这些群组。

我还希望创建一个总群组,包含所有参与挑战的人员。如果能让这个更大的“挑战者”群组仅包含19岁及以下、20-29岁、30-39岁等子群组,那将会方便得多。这样,我只需管理子群组,更改就会自动同步到总群组。

请问是否有(或能否实现)这样的方法?还是我不得不手动输入每个子群组中的所有用户名?(我认为总人数将达到数百人,这将是一项每周都要进行的任务。)

6 个赞

您应该使用“批量添加到组”功能,这将为您节省大量输入时间!

我们认为我们目前没有计划实现完整的分层组成员关系解析。

2 个赞

我一直对“批量添加到组”这个引用感到困惑,因为据我所知,它在用户界面中并未出现——你链接的 2015 年主题中的截图与我目前看到的内容不符。这是否等同于在组内使用“添加成员”对话框?

另外,如何将一个组的成员列表复制出来,以便批量添加到另一个组?目前我能想到的最佳工作流程是:复制“成员”页面的文本,然后使用支持样式处理的 grep 工具(在 Nisus Writer Pro 中)来提取用户名。虽然可行,但确实不够简便。

1 个赞

Meta 上有很多关于“批量添加到组”功能的参考资料,但我在 https://discourse.example.org/admin/groups/bulk 上再也看不到它处于激活状态了,只看到一个空白页面(我检查了几个我拥有管理员权限的不同站点)。@adamengst,你在那里看到什么了吗?

1 个赞

抱歉回复晚了,没注意到通知。不,我根本没有 https://forum.fingerlakesrunners.org/admin/groups/bulk 这个页面(404 错误),主群组页面在 https://forum.fingerlakesrunners.org/g。我到处都找不到关于“批量添加”的任何提及。

1 个赞

这算是一个隐藏功能吧:你可以使用批量邀请功能将现有用户添加到群组中。只需按照弹窗中的说明,准备好包含邮箱地址和群组的 CSV 文件,然后上传即可。系统不会向这些用户发送电子邮件。

2 个赞

@tobiaseigen 啊哈!您是否知道,如果该邮箱地址已经存在账户,系统是否会处理现有用户的群组更新?

是的,这正是我的意思:

该功能似乎身兼数职,我们可以改进其用户界面。我将提出一个方案。

3 个赞

太棒了,谢谢!这就去用 LibreOffice Calc!:keyboard:

1 个赞

谢谢!这已经接近了,不过我要指出,以电子邮件地址作为依据往往效果不佳,因为很多人拥有多个邮箱地址。因此,我必须在邀请前核实:该邮箱是否关联现有账户,还是另一个可能导致混淆的地址(甚至可能为其创建第二个账户)。

我不清楚底层机制是如何运作的,但看起来最简单的做法是允许群组包含对其他群组的引用。

1 个赞

您可以随时导出用户数据,然后利用导出的 CSV 文件创建新列表,再通过批量邀请功能将其重新导入。听起来您只需执行一次此操作,即可将现有用户配置到系统中;之后,当有新用户加入或需要调整其年龄段时,再进行手动处理即可。

或许可以定制代码来半自动化这一流程,以满足您社区的需求。如果您有预算,可以在 Marketplace 频道发布需求。

1 个赞

关于用户导出的观点很好——我之前没考虑到可以把它作为初始填充账户列表的方式。我会继续琢磨一下,看看效果如何。

1 个赞

分层组(组作为组的成员)还有一个额外的好处,即可以自动从继承的组中删除成员。

要“手动”实现此类功能,您必须记住组成员身份是继承自分层更高的组还是直接设置的。

您能否评论一下使用外部用户目录服务 (ldap) 来实现分层组功能?

2 个赞

@angus 我想知道 GroupAssociatedGroup 是否已经实现了此帖子的意图。

不,该功能与外部服务上的群组与 Discourse 群组的同步有关,而不是群组层级。

1 个赞

自从我发起这个帖子以来,我想我应该进来发表一下我的看法,我的分层群组请求仍然完全相关。

“批量邀请加入群组”功能根本不起作用,因为在我的例子中,我将人员添加到基于年龄的特定群组以及一个包含所有基于年龄的群组的总体群组中,这些群组在四个月的时间范围内随着他们在另一个系统中注册而添加。

我将看看我的开发人员今年是否可以自动化这个过程,因为我现在知道每周手动完成这个过程是多么的乏味。

1 个赞

@adamengst 在这方面有什么进展吗?

是的,事实上,我的开发人员能够将我们用于比赛注册的 Webscorer 的数据与 Discourse 群组同步。这要求姓名匹配,但他构建了一个显示不匹配的管理员页面。

因此,没有层级结构,但我们正在自动填充多个群组,这消除了我的主要需求。

这是开源代码,如果有人有兴趣了解它的工作原理,我大概可以分享。

3 个赞

我也收到了一个直接的请求,所以如果有人想看看 @SteveDesmond.ca 编写 Discourse 群组的代码,可以在以下网址找到:

Steve 说他很乐意回答有关此代码的问题。

2 个赞

这是亚当之前提到的特定代码的大纲:

  1. (L36) 获取外部系统中的所有用户
  2. (L37) 获取 Discourse 中的所有用户
  3. (L38-39) 获取相关组成员(在这种情况下,“global”是“超级组”)
  4. (L46-78) 对于外部系统中的每个用户,检查他们是否存在于 Discourse 中,并映射他们已属于哪些组以及需要添加到哪些组
1 个赞