良い発見ですね @thoka!
問題はここにあります
users は {"username_lower" => User オブジェクト } を返します。
ただし、name が小文字化されていない場合、users[name] は存在しません。
修正:
if user = users[name.downcase]
...
elsif group = groups[name.downcase]
...
あるいはより良い方法として、メソッドの冒頭ですべての名前を小文字化することです。ここには多くの問題があります。groups は .where("lower(name) IN (?)", @names.map(&:downcase)) を適切に処理していますが、visible_group_ids_for_allowed_check、topic_allowed_group_ids、mentionable_group_ids、members_visible_group_ids といった関数はすべて where(name: @names) を使用しており、これも大文字小文字の区別に関する問題を引き起こしています。