اختبارات Guardian قبل وبعد واجهة برمجة التطبيقات

لقد صادفت شيئًا ما عدة مرات عند بناء الإضافات وهو الحاجة إلى تعديل نتيجة فحوصات Guardian can_*. لقد صادفتها مرة أخرى في إضافة ActivityPub:

https://github.com/discourse/discourse-activity-pub/blob/main/extensions/discourse_activity_pub_guardian_extension.rb

لقد قمت للتو برفع مسودة طلب سحب (PR) يضيف طريقة جديدة لواجهة برمجة تطبيقات الإضافات من جانب الخادم تسمح لك بالتسجيل قبل وبعد فحوصات طرق can_* الخاصة بـ guardian، مما يتيح القدرة على تغيير نتيجة الطريقة. على سبيل المثال:

add_guardian_check(:before, :edit_post) do |guardian, result, post|
  !post.activity_pub_remote?
end

فضولي لمعرفة التعليقات على كل من النهج والتنفيذ قبل نشره للمراجعة.

7 إعجابات

إعادة رفع هذا الموضوع لمن يهمه الأمر. إشعار @pmusaraj

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

شكرًا لك يا أنجوس!

لا أرى أي مشاكل مع التسجيل before_*. التسجيل after_* أكثر صعوبة قليلاً. من ناحية الأمان، يعني التسجيل after_* أنه يمكن للمكونات الإضافية تجاوز النواة بطرق قد تكون غير آمنة. من الواضح أن المكونات الإضافية يمكنها فعل ذلك بجميع أنواع الطرق، ولكن واجهة برمجة تطبيقات المكونات الإضافية لا ينبغي أن تسهل ذلك أكثر.

أيضًا، ماذا يحدث إذا استهلكت مكونات إضافية متعددة خطاف after_*؟ أي منها يفوز؟

نعم، أفهم ما تقصده.

تقبل عمليات التحقق وسيط أولوية. انظر هذا التحديد

it "respects check priority" do
  plugin.add_guardian_check(:after, :edit_post, 2) { false }
  plugin.add_guardian_check(:after, :edit_post, 0) { true }
  plugin.add_guardian_check(:after, :edit_post, 1) { false }
  expect(Guardian.new(user).can_edit_post?(post)).to be_truthy
end

ما رأيك أن أقتصر هذا السحب على عمليات التحقق before فقط؟ سيخدم ذلك الاحتياجات الفورية ويقلل المتغيرات قيد اللعب قليلاً هنا.

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

نعم، بالتأكيد، لنبدأ بفحوصات before فقط. شكرًا لك!