Bei der Untersuchung von Private Topics Plugin - #109 by thoka bin ich auf den Umstand gestoßen, dass eine Erwähnung eines Benutzers in einer eingeschränkten Kategorie nicht gemeldet wird, wenn der Benutzername Großbuchstaben enthält.
Wenn ich @SomeUser erwähne, fordert der Editor /composer/mentions.json?names[]=SomeUser&topic_id=10728 an. Im Ergebnis wird der Benutzername in Kleinbuchstaben zurückgegeben, ohne dass user_reasons gesetzt ist.
Eine Abfrage nach dem Benutzernamen in Kleinbuchstaben liefert "user_reasons": {"someuser":"category"}.
Wenn ich im Editor Kleinbuchstaben für Benutzernamen verwende, werden Warnungen für Personen mit unzureichenden Rechten angezeigt.
Verwendet man die vom Editor bereitgestellte Autovervollständigung, werden die eingegebenen Benutzernamen in Kleinbuchstaben durch Namen in Großbuchstaben ersetzt und werden daher nicht gemeldet.
users gibt {"username_lower" => User-Objekt } zurück.
Wenn name jedoch nicht kleingeschrieben wird, existiert users[name] nicht.
Fix:
if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...
Oder besser: Kleinschreibe alle Namen am Anfang der Methode, da es dort viele Probleme gibt. groups macht sauber .where("lower(name) IN (?)", @names.map(&:downcase)), aber Funktionen wie visible_group_ids_for_allowed_check, topic_allowed_group_ids, mentionable_group_ids und members_visible_group_ids verwenden alle where(name: @names), was ebenfalls Probleme mit der Groß-/Kleinschreibung einführt.