Groups API — ручная синхронизация членства в группах?

Кажется, я загнал себя в тупик…

У меня есть сайт с подпиской (тоже на Rails), и я использую API Discourse для автоматического создания и заполнения ограниченных групп форума для всех моих групп пользователей. Это работает отлично; я даже создаю для каждой группы пост-вики в качестве начального материала. (Я опубликовал свой код.)

Теперь столкнулся с проблемой: иногда мне нужно вручную синхронизировать состав группы, например, при слиянии групп на моём сайте или если координатор случайно удалил/добавил людей через форум. Для этого я хочу удалить ВСЕХ участников группы Discourse, а затем добавить тех, кто должен быть в ней.

Первая проблема: в API Discourse, похоже, нет функции «удалить всех» участников группы, поэтому мне приходится указывать имена всех, кого нужно удалить.

Вторая проблема: я не могу получить текущий состав группы Discourse, потому что по какой-то причине система требует имя группы, а не её ID. На моём сайте я храню только ID группы, потому что именно его использует Discourse для соответствующих запросов PUT/POST/DELETE.

Третья проблема: это должно быть очевидно, но я не вижу способа получить имя группы, передав её ID, если только не захочу получить все 200+ групп и перебрать их, пока не найду ту, у которой совпадает ID. Это кажется излишне трудозатратным и противоречит соглашениям Rails.

Чего я не понимаю?

РЕДАКТИРОВАНИЕ: @codinghorror очень помог в прошлый раз — есть ли какие-то идеи сейчас?

Не уверен, но, возможно, @justin или @blake могли бы проверить это в течение своей предстоящей рабочей недели?

Похоже, вы правы в этом вопросе — вы не можете получить доступ к ресурсам группы по её числовому ID, только по имени.

ID, на который ссылаются здесь, на самом деле не является ID, а представляет собой имя, согласно:

Вероятно, имеет смысл рефакторить маршрут /g/<имя-группы>, чтобы он соответствовал тому, как мы сейчас обрабатываем темы и категории. Что-то вроде /g/<имя-группы>/<id> или /g/patrons/41, и разрешить /g/41 работать аналогичным образом.

Пока мы это не исправим, похоже, что единственный способ достичь того, что вы ищете, это:

  1. Хранить имя группы вместе с ID.
  2. Отправлять GET-запрос к g/<имя-группы>/members.json, чтобы получить список участников.
  3. Перебирать их, чтобы удалить каждого и затем снова синхронизировать.

Это действительно замечательная проблема, над которой стоит поработать. Спасибо, что подняли её, @Judith! Группы обладают огромной силой и большим потенциалом! :rocket: Я тоже недавно столкнулся с этой проблемой, занимаясь поддержанием членства в группах из WordPress. Было бы здорово автоматически добавлять или удалять людей из групп в зависимости от страны и региона, где они указывают, что находятся, языков, на которых они говорят, тем, которые их интересуют, и т. д., при регистрации и обновлении их профилей в WordPress.

Предложение @justin хранить как название группы, так и её ID — отличное, и я передам его разработчикам, которые сейчас работают над этой интеграцией.

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

Рекомендую использовать SSO между вашим основным сайтом и Discourse. Так вы получите управление членством в группах бесплатно и будете иметь endpoint sync_sso для обновления членства простым и понятным способом.

Сначала я использовал только SSO, но затем столкнулся с проблемой: он обновляет членство в группах только при входе пользователей. В случае, если кто-то не переизбран, теряет право доступа к группе или, наоборот, получает такое право (и должен получать уведомления по электронной почте о сообщениях в подфоруме с ограниченным доступом), мне нужно добавлять или удалять их через API.

Метод sync_sso создан именно для решения этой проблемы! Вы можете инициировать так называемый «виртуальный» вход через SSO в любой момент изменения членства, чтобы полностью синхронизировать данные пользователя.

Привет!

Доступна ли эта функция сейчас? Есть ли какие-либо обновления по этому вопросу?

Спасибо!

Есть какие-то обновления? @tobiaseigen