Приватные события внутри группы

В настоящее время записи событий всегда являются частью элемента пользовательского интерфейса календаря, который можно добавить в категорию. Нет способа ограничить доступ к событию для специальной группы пользователей. Если у вас настроен Discourse с несколькими сообществами, все сообщества видят все события всех остальных сообществ. Если вы отображаете события Discourse на внешнем сайте через вызов API, например:

https://example.discourse.org/discourse-post-event/events.ics?user_api_key=[xxxxx]

будут отображены ВСЕ события.

Должна быть возможность создавать «внутренние» события, которые отображаются только внутри определенной группы пользователей. Эти события не должны быть доступны для чтения через «общий» запрос ICS API. Вместо этого они должны быть доступны только с помощью специального дополнительного «ключа API группы» или каких-либо других безопасных ограничений. Сценарий использования заключается в выборе между «публичными» событиями и событиями, которые являются «приватными» и видны и редактируются только внутри специальной группы пользователей.

1 лайк

Подойдёт ли вам вариант, при котором вы создадите пользователя, принадлежащего только к той группе, которая вам нужна, и сгенерируете URL-адрес подписки на календарь из настроек этого пользователя? В этом случае лента будет включать только те события, которые видит данный пользователь.

1 лайк

Хм, я не уверен. Это звучит как обходное решение, а не как настоящее «решение» :smiling_face_with_sunglasses:

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

  1. Одна категория на группу сообщества. Для неё установлены разрешения «глобальное только чтение» и «чтение/создание/ответ в сообществе». Эта категория федеративна через AP, чтобы позволить людям без аккаунтов Discourse видеть события, а также обеспечить интеграцию календаря Discourse в сторонние системы (например, WordPress с плагином ICS).
  2. Различное количество внутренних подкатегорий. Для этих подкатегорий установлены только разрешения «чтение/создание/ответ в сообществе». Они невидимы без соответствующих разрешений группы.

Единственные пробелы:

  1. Текущий запрос ICS возвращает ВСЕ события.
  2. Нужен способ запросить только события конкретного сообщества через ICS/API.

Все события или все события, к которым имеет доступ пользователь, чей API-ключ используется?

Как вы представляете процесс отбора событий, которые должны быть включены в конкретный запрос?

Хорошее замечание.

Для API-ключей предусмотрены два уровня доступа: «один пользователь» или «все пользователи». API-ключи, которые мы в настоящее время используем для запроса ICS, имеют уровень «все пользователи».

Таким образом, чтобы решить эту проблему, нам, вероятно, потребуются API-ключи уровня «один пользователь». При этом у выбранного пользователя должна быть только группа разрешений «сообщества» и ничего больше.

Дайте мне это проверить. Возможно, это поможет решить проблему …

1 лайк

Некоторые результаты тестирования:

  • создан API-ключ с уровнем пользователя «single user»;
  • сначала я посмотрел настройки области действия «granular», но не смог найти ограничения для конечных точек «events». Хотя «events» указан как группа запросов на Discourse API Docs;
  • вместо этого я использовал «read only». Результат: «You are not authorised to view the requested resource.»

curl -kv https://xxx/discourse-post-event/events.ics?user_api_key=xxx не возвращает файл .ics, если использовать API-ключ уровня «single user». А при уровне «all users» возвращается полный список событий. Я не вижу способа «отфильтровать» события для специальной группы пользователей.

Я также проверил https:[xxxx]/admin/plugins/discourse-events/settings на предмет возможных неправильных настроек, связанных с API, — результатов нет.

Есть ли какие-либо комментарии?