Добавление существующих (и приглашение новых) пользователей в группу

У меня есть конкретный сценарий использования, и я хотел бы узнать, есть ли более простой способ его реализации.

  • Не у всех наших пользователей (через наш SSO) есть активные аккаунты на форуме.
  • Нам регулярно нужно добавлять пользователей в группу форума для доступа к закрытому разделу.
  • Наличие активных аккаунтов на форуме у пользователей неизвестно до попытки добавления их в группу.

Например:
Каждый месяц сотрудник получает список из 100+ аккаунтов, которые имеют право на доступ к закрытому форуму. У этих аккаунтов есть имена пользователей SSO и адреса электронной почты, но у них может еще не быть аккаунта на форуме.

:question: Есть ли простой способ добавить людей в группу, если у них уже есть аккаунты на форуме, и пригласить их на форум (автоматически добавляя в группу), если у них их нет?

На странице «Группы» кнопка Добавить участников позволяет вставить список имен пользователей через запятую. Если имена действительны, пользователи будут добавлены в группу. Если имя недействительно (то есть аккаунта на форуме еще нет), операция завершится ошибкой, и они не будут добавлены.

Кроме как вручную просматривать список успешно добавленных пользователей, выявлять, какие имена не были добавлены, а затем отправлять этим людям приглашения на форум (например, (Superseded) Multiple Use Invite Links), — существует ли простой способ объединить приглашение и добавление в группу для смешанного списка текущих и потенциальных пользователей форума?

В идеале я бы хотел найти способ сделать это в один шаг.

Возможное (но всё ещё очень громоздкое!) многоступенчатое решение могло бы выглядеть так:

  1. Ввести список имён в запрос Data Explorer, который возвращает списки активных и неактивных имён пользователей.
  2. Использовать функцию «Добавить в группу» для списка активных пользователей.
  3. Отправить специальную ссылку-приглашение всем неактивным пользователям.

Если есть способ упростить этот процесс, я с радостью выслушаю предложения :slight_smile:

Вы не сможете использовать Data Explorer. Это инструмент только для чтения.

Что-то подобное нужно будет создать заново.

Вы рассматривали возможность добавления пользователей в группы Discourse с помощью параметров SSO add_groups и remove_groups? Для пользователей, которые существуют на вашем сайте-провайдере SSO, вы можете создать для них учётные записи в Discourse и добавить их в группы Discourse, выполнив вызов API к маршруту sync_sso. Некоторые подробности настройки этого процесса можно найти здесь: Синхронизация данных пользователя SSO через маршрут sync_sso. Мы можем предоставить более подробную информацию о настройке, если этот подход кажется вам подходящим.

Спасибо, Саймон — это выглядит многообещающе.

Все наши пользователи существуют на сайте SSO (они являются продавцами на наших маркетплейсах), но только их часть создаёт аккаунты в Discourse для использования наших форумов. Этот SSO охватывает как покупателей, так и продавцов: мы не хотим автоматически создавать аккаунты в Discourse для всех покупателей (их слишком много!), но создание аккаунтов для всех продавцов значительно упростило бы задачу.

В данном случае нам нужно предоставлять доступ к закрытым группам форума только конкретным продавцам, когда они начинают использовать определённые маркетплейсы или услуги.

Например: продавец на Маркетплейсе 1 имеет аккаунт SSO. На этом этапе он может создать аккаунт в Discourse, войдя на форумы.

Позже этот продавец получает доступ к Маркетплейсу 2, и его аккаунт SSO фиксирует это изменение. У нас есть пользовательская группа (и закрытая категория форума) для этого маркетплейса.

  • Если к этому моменту у него уже есть аккаунт в Discourse, нам нужно обновить его группы, чтобы он мог видеть закрытую область форума.
  • Если у него ещё нет аккаунта в Discourse, мы хотели бы создать его для него с соответствующими группами.

Команда в настоящее время использует функцию «добавить в группу» с перечислением имён пользователей через запятую. Если у пользователя уже есть аккаунт в Discourse, он получает доступ к группе… если его ещё нет на форумах, ничего не происходит.

Чтобы охватить пользователей, которые создали свои аккаунты в Discourse после последнего добавления пакета в группу, команда обычно включает все подходящие имена пользователей за последние X месяцев при попытке обновить членство в группе, что является довольно громоздким процессом.

Если вы сделаете вызов API к маршруту sync_sso, включив параметр SSO add_groups, существующие пользователи будут добавлены в группу. Если у пользователя ещё нет учётной записи Discourse, для него будет создана учётная запись, и он будет добавлен в группу. Аналогичным образом вы можете использовать параметр SSO remove_groups для удаления пользователей из групп. Ещё одним преимуществом использования маршрута sync_sso для этой задачи является то, что пользователю не нужно выходить из системы и снова входить в Discourse, чтобы изменения вступили в силу.

Если вашему проекту будет полезно ознакомиться с примером кода на PHP/WordPress, вы можете увидеть реализацию здесь: https://github.com/discourse/wp-discourse/blob/master/lib/utilities.php#L378. Файл, на который я дал ссылку, содержит некоторые вспомогательные функции, которые сайты могут использовать для расширения плагина WP Discourse. Именно поэтому в нём используются статические функции.

Спасибо, Саймон! Это звучит идеально — гораздо лучше нашего текущего метода :slight_smile: