Принудительная публикация в ограниченной категории

Здравствуйте,

Я использую Discourse через API в качестве бэкенда для сообщества. Есть определённые категории, которые должны быть ограничены для обычных пользователей, чтобы они не могли создавать темы или редактировать заголовки тем. Однако они должны иметь возможность просматривать обсуждения и отвечать на них. Всё это должно выполняться через API (с использованием административного токена) от имени этих пользователей. Есть ли способ реализовать это с помощью надлежащих мер безопасности и вызовов API? Например, достаточно, если я смогу принудительно создать пост в ограниченной категории от имени обычного пользователя (используя административный ключ/пользователя), но я не могу найти такой случай в документации по API.

Большое спасибо!

API действительно не будет документирована для вашего сценария использования, так как она полностью не поддерживается (хотя у меня есть как минимум один клиент, который делает что-то подобное). Как провести реверс-инжиниринг API Discourse — это, вероятно, лучшее, что вы сможете найти, а также discourse/config/routes.rb at main · discourse/discourse · GitHub.

Если вы используете ключ администратора API, то все ограничения снимаются, поэтому вы должны иметь возможность создать тему. Или, возможно, создайте тему от имени пользователя, а затем переместите её в категорию, в которую вы не хотите, чтобы они могли публиковать?

Спасибо. Я знаю о реверс-инжиниринге, но со стороны фронтенда Discourse нет похожего сценария использования для перехвата. Я имею в виду, что, даже будучи авторизованным как администратор, нет возможности создать тему от имени другого пользователя.

Временное решение, которое я реализовал, заключается в том, чтобы разрешить всем пользователям видеть и комментировать конкретную категорию, а администраторам — видеть, комментировать и создавать темы. Затем темы создаются только «системой» (так что пользователи не могут изменить заголовки), и вместе с ними создается шаблон исходного поста. После этого я могу использовать API-ключ, чтобы комментировать от имени разных пользователей в созданных темах.

Я думаю, что в другой группе, которой я помогал, пользователи входили в Discourse (через SSO, возможно?), чтобы действовать от своего имени. Таким образом, вы получаете все защиты пользователей, предоставляемые Rails. Выполнение всего через один ключ администратора API кажется рецептом катастрофы.

Но, полагаю, для решения вашей текущей проблемы вам нужно будет создать тему как администратор, а затем изменить её владельца. Это должно быть достаточно просто. (И надеяться, что ничего не пойдет не так между началом и концом всей транзакции.)

Другой возможный вариант — создать плагин, который добавит маршрут create-as-user (я не проверял маршруты, на которые я ссылался ранее, чтобы узнать, есть ли он уже там каким-то образом).

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