Ottima individuazione @thoka!
Il problema è qui
users restituisce {"username_lower" => oggetto User }
Tuttavia, se name non è convertito in minuscolo, users[name] non esiste.
Fix:
if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...
O ancora meglio: converti tutti i nomi in minuscolo all’inizio del metodo, dato che ci sono molti problemi lì dentro. groups gestisce correttamente .where("lower(name) IN (?)", @names.map(&:downcase)), ma funzioni come visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids e members_visible_group_ids eseguono tutte where(name: @names), il che introduce anch’esso problemi di sensibilità alle maiuscole/minuscole.