Если кто-то наткнётся на это и так же, как я, был в замешательстве, я привожу ниже свой код, который у меня заработал как задумано. Я не изменял никаких файлов. Я просто создал новый файл plugin.rb и поместил в него следующее:
# about: Позволяет пользователям в режиме анонимности менять свои имена
# version: 0.1
require_dependency 'guardian'
require_dependency 'guardian/user_guardian'
class ::Guardian
end
module ::UserGuardian
def can_edit_username?(user)
return false if SiteSetting.sso_overrides_username?
return true if is_staff?
return false if SiteSetting.username_change_period <= 0
return true if is_anonymous?
is_me?(user) && ((user.post_count + user.topic_count) == 0 || user.created_at > SiteSetting.username_change_period.days.ago)
end
def can_edit_name?(user)
return false unless SiteSetting.enable_names?
return false if SiteSetting.sso_overrides_name?
return true if is_staff?
return true if is_anonymous?
can_edit?(user)
end
end
Это переопределяет класс user_guardian.rb в ядре Discourse, позволяя пользователям менять имя пользователя и имя своих анонимных учётных записей.
Если вы сравните то, что у меня здесь, с тем, что находится в user_guardian.rb в ядре Discourse, вы увидите, что есть множество других вещей, с которыми мне не нужно было ничего делать, поэтому я оставил их без изменений. Всё, что мне потребовалось, — это отредактировать два метода can_edit_username и can_edit_name, изменив некоторые возвращаемые значения с false на true, и я смог решить свою задачу.
Конечно, можно было бы внести улучшения, и, вероятно, существуют лучшие практики, которые я смог почерпнуть, прочитав связанные сообщения здесь и в других местах, но если вы, как и я, только начинаете знакомство с Ruby и просто хотите внести очень простые изменения в ядро, то это рабочий минималистичный пример того, что нужно сделать.
Огромное спасибо всем участникам этой ветки за ваше терпение, поддержку и помощь! В особенности @merefield, который ранее уже помогал мне в другом сообщении.