تمرير `scope:` عبر شجرة التسلسلات: هل نفعل ذلك أم لا؟

يمكن توفير Serializers مع معلمة scope: مخصصة لتوفير سياق الأذونات للمُسلسل. في كود Discourse، النطاق المُقدم هو Guardian، ويبدو أن كل مُسلسل مُصمم لاستقبال Guardian كنطاقه. يحتفظ ApplicationController (الفئة الأساسية لجميع وحدات التحكم) بـ Guardian ولديه آليات متعددة لمحاولة التأكد من حقن Guardian كنطاق لجميع المُسلسلات.

ومع ذلك، لا تغطي هذه الآليات كل سيناريو. كلما تم بناء مُسلسل بشكل صريح، على سبيل المثال، استدعاءات لـ ActiveModel::ArraySerializer.new(...)، فيجب حقن النطاق يدويًا. في الواقع، تحتوي معظم حالات XxxxSerializer.new(...) على scope: scope أو scope: guardian في قائمة الوسائط. ولكن، ليس كلها.

لذا، سؤالي: ما هي فلسفة التطوير هنا؟ هل هي:

  1. يجب ببساطة دائمًا تمرير النطاق (ما لم يكن هناك سبب محدد لعدم القيام بذلك)؛ إذا نسي شخص ما القيام بذلك، فهذه مشكلة تنتظر الحدوث ويجب إصلاحها بإضافة scope: ... مناسبة؛ أو
  2. نعم، هذا جيد؛ يمكن لشخص ما إصلاح تلك النقاط عند ظهورها عندما تسبب مشكلة لشخص ما بالفعل.

في حالتي، أضفت استخدامًا لـ scope إلى BasicUserSerializer… ثم شعرت بالحيرة الشديدة عندما اكتشفت أنه تسبب في مشاكل في الدردشة… والتي أدركت أخيرًا (بعد الكثير من البحث) أنها نتيجة لمُسلسل مدفون في سلسلة XxxSerializer -> YyySerializer -> ... -> BasicUserSerializer لم يقم بتمرير النطاق!

إعجاب واحد (1)