Se alguém encontrar isso e estiver tão perdido quanto eu, estou fornecendo meu código abaixo, pois consegui fazê-lo funcionar como pretendido. Não modifiquei nenhum arquivo. Simplesmente criei um novo arquivo plugin.rb e coloquei dentro dele o seguinte:
# name: noms
# about: Permite que usuários no Modo Anônimo alterem seus nomes de usuário
# 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
Isso substitui a classe user_guardian.rb no núcleo do Discourse para permitir que usuários alterem o nome de usuário e o nome de suas contas de usuário anônimo.
Se você comparar o que tenho aqui com o que está em user_guardian.rb no núcleo do Discourse, verá que há um monte de outras coisas com as quais não precisei fazer nada, então as deixei como estavam. Tudo o que precisei foi editar esses dois métodos can_edit_username e can_edit_name, alterando alguns valores de retorno de false para true, e consegui realizar o que precisava.
Certamente há melhorias que poderiam ser feitas, e provavelmente há melhores práticas que pude aprender lendo os posts vinculados aqui e em outros lugares. Mas se você é novo em Ruby como eu e só quer fazer uma alteração muito simples no núcleo, este é um exemplo minimalista funcional do que você precisa fazer.
Muito obrigado às pessoas neste tópico pela paciência, encorajamento e assistência! Em especial a @merefield, que na verdade me ajudou em outro post no passado.