Заглавные буквы в имени пользователя нарушают проверку достижимого упоминания в редакторе

При исследовании Private Topics Plugin - #109 by thoka я обнаружил, что упоминание пользователя в ограниченной категории не фиксируется, если имя пользователя содержит заглавные буквы.

Если я упоминаю @SomeUser, редактор отправляет запрос
/composer/mentions.json?names[]=SomeUser&topic_id=10728,
и в результате возвращается имя пользователя в нижнем регистре, без установки user_reasons.

Запрос имени пользователя в нижнем регистре возвращает "user_reasons": {"someuser":"category"}.

Если в редакторе использовать имена пользователей в нижнем регистре, будут отображаться предупреждения для пользователей с недостаточными правами.

Если использовать автодополнение, предоставляемое редактором, введённые имена в нижнем регистре заменяются на имена с заглавными буквами, и поэтому они не фиксируются.

3 лайка

Отличная находка, @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), что также вносит проблемы с чувствительностью к регистру.

3 лайка

Правильное исправление — это

но это слишком крупное изменение, чтобы я мог с комфортом принять его на данном этапе :grimacing:

Вместо этого я буду исправлять каждый «эндпоинт» по отдельности, чтобы упростить проверку и снизить риски.

Вот первый шаг

4 лайка