الأحرف الكبيرة في اسم المستخدم تكسر فحص الذكر القابل للوصول في المحرر

أثناء التحقيق في https://meta.discourse.org/t/private-topics-plugin/268646/109، اكتشفت أن الإشارة إلى مستخدم في فئة مقيدة لا يتم الإبلاغ عنها عندما يحتوي اسم المستخدم على أحرف كبيرة.

عند الإشارة إلى @SomeUser، يطلب المحرر
/composer/mentions.json?names[]=SomeUser&topic_id=10728
في النتيجة، يُعاد اسم المستخدم بحروف صغيرة، دون تعيين user_reasons.

الاستعلام عن اسم المستخدم بحروف صغيرة يُرجع "user_reasons": {"someuser":"category"}.

إذا استخدمت أحرفًا صغيرة لأسماء المستخدمين في المحرر، فسيتم عرض تحذيرات للأشخاص الذين لا يملكون الصلاحيات الكافية.

إذا استخدمت الإكمال التلقائي الذي يوفره المحرر، فسيتم استبدال أسماء المستخدمين المكتوبة بحروف صغيرة بأسماء بحروف كبيرة، وبالتالي لن يتم الإبلاغ عنها.

إعجابَين (2)

اكتشاف رائع @thoka!

المشكلة هنا

users تُرجع {"username_lower" => كائن مستخدم }

ومع ذلك، إذا لم يتم تحويل 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 إعجابات