thoka
(Thomas Kalka)
1
在调查 Private Topics Plugin - #109 by thoka 时,我发现:如果用户名包含大写字母,在受限分类中提及该用户时不会被报告。
如果我提及 @SomeUser,编辑器会请求
/composer/mentions.json?names[]=SomeUser&topic_id=10728
在返回结果中,用户名以小写形式返回,且未设置 user_reasons。
使用小写字母查询该用户名时,会返回 "user_reasons": {"someuser":"category"}。
如果在编辑器中使用小写字母输入用户名,则会向权限不足的用户显示警告。
如果使用编辑器提供的自动补全功能,输入的小写用户名会被替换为大写形式,因此不会被报告。
2 个赞
RGJ
(Richard - Communiteq)
2
找得好 @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 个赞