Синхронизировать членство в группе с внешним списком адресов электронной почты

Как проще всего это сделать?

Внешний скрипт, который запускается каждую ночь и использует API Discourse?

Или уже существует подходящий плагин?

Спасибо.

Вы описываете, вероятно, худшее решение вашей проблемы. Не могли бы вы отступить на шаг и определить саму проблему?

Что поддерживает этот список? 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 "found user #{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:

Но API Discourse довольно прост в освоении, так что, думаю, твой вариант — именно то, что нужно тебе!

Если у Mailman есть хуки, можно настроить их так, чтобы они делали вызовы API при обновлении списка подписчиков.

Также может оказаться полезной настройка категории с названием вроде «… зеркально отображает список».