Определение пользователей в нескольких группах с использованием AND вместо OR?

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

Если на вашем сайте доступен плагин Data Explorer, вы можете использовать запрос Data Explorer, который возвращает список всех пользователей целевой группы с уровнем доверия 3. Если у вас не слишком много пользователей, вы сможете скопировать/вставить имена пользователей, полученные из запроса, прямо в форму «Добавить пользователей» группы. Похоже, Discourse обрабатывает добавление имен пользователей, которые уже есть в группе, в эту форму, поэтому, если вы будете запускать запрос периодически, сможете просто постоянно копировать возвращаемые имена пользователей в форму «Добавить пользователей» группы. Обратите внимание, я не уверен, каково максимальное количество имен пользователей, которые можно вставить в форму. Я тестировал это с 80 пользователями, и всё работало без проблем. Также, если вы попытаетесь вставить точную копию списка пользователей в форму «Добавить пользователей», Discourse, похоже, вернет ошибку. Эту ошибку можно игнорировать.

Вот запрос, с которым я это тестировал. Перед запуском запроса вам нужно указать имя группы, например ‘year_2’.

--[params]
-- string :group_name

SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3

Возможно автоматизировать описанный выше процесс, запустив запрос Data Explorer через API, а затем используя результаты запроса API для обновления группы. Подробная информация об этом здесь: Запуск запросов Data Explorer через API Discourse. После этого вам нужно будет обновить участников группы через API.

Было бы интересно иметь возможность выполнять некоторые действия непосредственно над результатами запроса Data Explorer. Например, с помощью запроса, возвращающего список имен пользователей, добавлять всех этих пользователей в группу, не проходя через этап копирования/вставки.