同步组的成员资格与外部电子邮件地址列表

实现这一目标最简单的方法是什么?

是使用一个每晚运行的外部脚本并通过 Discourse 的 API 来实现?

还是已经存在现成的插件?

谢谢。

你描述的可能是解决该问题的最糟糕方案。能否退一步,先明确问题本身?

是什么在维护这个列表?DiscourseConnect - Discourse 官方单点登录 (SSO) 是一个可能的解决方案,但也可能存在其他选择。

我喜欢计算机从业者的直率 :slight_smile:

我正考虑尝试一下 Mirroring a read-only mailing list in Discourse Discourse 分类来使用。

那最好的方法是什么呢?或者至少是稍微好一些的方法?如果邮件列表里的人更倾向于论坛的私密分类,那对 Discourse 来说就是胜利。

如果您没有通过某个外部应用程序管理这些用户,那么您可以这样做:

  def load_csv(path)
    CSV.parse(File.read(path), headers: true)
  end

  def update_group
   g = Group.find(43) # 您想要的任意群组 ID
   GroupUser.where(group_id: g.id).destroy_all
   user_emails = load_csv('/path/to/file')
    user_emails.each do |u|
      user = User.find_by_email(u['Email'])
      next unless user
      puts "找到用户 #{uid}"
      GroupUser.find_or_create_by(group_id: g.id, user_id: user.id)
    end
  end

如何实施则是另一个问题。也许可以开发一个插件。

或许可以开发一个插件,当用户在某个分类中发帖时,自动将其添加到对应的群组中?

谢谢。

但该分类仅对群组成员可见,因此这里会出现“先有鸡还是先有蛋”的困境!

我对 PHP 相当熟悉,因此我认为可以编写一个脚本,从 Mailman 2 中获取电子邮件地址(它有一个 Python 脚本可用于此目的),然后将其与 Discourse 用户列表进行比对,并相应地将 Discourse 用户添加或移除出相关群组。我知道你说过这可能是“最糟糕的解决方案”……

我甚至还没有设置邮件列表镜像,所以目前这些都只是想法。

是的,但我原本的想法是,你会通过其他方式将数据导入到列表中。

你也可以让该群组允许加入请求,并让 Discourse 来处理这些请求。

我讨厌 PHP,所以你的方案听起来越来越糟了!:joy:

不过 Discourse API 其实很容易上手,所以我觉得这个方案对你来说是最合适的!

如果 Mailman 支持钩子(hooks),你可以让它更新订阅者列表时调用 API。

有一个类别设置,名称类似于“……镜像列表”,可能也会有所帮助。