Как настроить/переопределить topic guardian через плагин

Я заказываю разработку плагина, который будет добавлять булево значение на основе пользовательской логики в таблицу user_custom_fields для каждого пользователя, которому не разрешено создавать новую тему.

user.custom_fields['can_create_topic'] = false;

Что я хочу сделать?
Я хочу скрыть кнопку «+ Новая тема» для некоторых пользователей на основе пользовательской логики.

Вопрос
Возможно ли настроить can_create_topic в guardian так, чтобы он выполнял дополнительную проверку поля user_custom_field для определения, разрешено ли пользователю создавать новую тему или нет?

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

Я не знаю ваш конкретный случай использования, но самый простой и безопасный способ сделать это — добавить или удалить этих пользователей из группы, имеющей разрешение на создание тем.

@pfaffman Это тоже хорошая идея. Но я думаю, что если я смогу переопределить метод can_create_topic? в TopicGuardian, это будет более чистым решением. Есть ли какой-нибудь плагин, на который я могу опереться, где есть похожее изменение?

Я не знаю, как сделать так, чтобы мой подкласс TopicGuardian из плагина заменил TopicGuardian в классе Guardian, так как он подключается через миксин, а не внедряется как зависимость.

Хорошо. Кажется, я нашёл ответ. Мне нужно просто реализовать метод can_create_topic? в модуле ::TopicGuardian, и это автоматически изменит поведение TopicGuardian без необходимости его внедрения или регистрации где-либо ещё. Кроме того, я могу использовать метод super внутри своего переопределённого метода, чтобы не приходилось вручную синхронизировать его с оригинальным методом на случай его изменения.

Получил помощь из этой темы: Overriding user_guardian.rb in a plugin (no fork necessary!)