القضبان: وضع وانقطاع في قبل مرشح
-
18-09-2019 - |
سؤال
أريد مرشح قبل "must_have_permission_to_write" عندما اتصل المستخدم إذا لم يكن المستخدم أذولا للكتابة يجعل رسالة تقول "لا يمكنك القيام بذلك!" والعودة.
المشكلة هي أنني أحصل على "يمكن فقط تقديم أو إعادة توجيه مرة واحدة لكل عمل" بالطبع ... كيف يمكنني إيقاف التنفيذ في المرشح قبل المرشح؟ شكرا
المحلول
أعتقد أن أسهل إجابة هي إضافة إعادة توجيه وإرجاع خطأ لك must_have_permission_to_write
طريقة.
def must_have_permission_to_write
unless current_user.has_permission?(something)
redirect_to access_denied_path
return false
end
end
بعد ذلك، قم بإنشاء إجراء للوصول إلى مكان ما، أضف المسار، ووضع كل ما تريده في القالب.
نصائح أخرى
هناك بعض الأشياء التي لاحظتها عن المشاركات هنا:
- سوف استدعاء التجسيد أو إعادة التوجيه في مرشح قبل إلغاء الإجراء. كانت هناك نقطة عندما لم تفعل القضبان هذا، ولكن بقدر ما أعرف، هذا تلقائي الآن. لا يبدو لي أن أجد إشارة إلى هذا عبر الإنترنت، أي شخص من فضلك يصححني إذا كنت مخطئا.
- استخدام "والعودة" هو وسيلة رائعة لإلغاء الإجراء إذا كنت في الواقع داخل الإجراء. في الأمثلة فوق الأساليب، يتم تعريف الأساليب على أنها تصفية قبل المرشح (أي أساليب منفصلة) الاتصال "والعودة" في نهاية الطريقة، ليست مفيدة.
- لا أعتقد أنك يجب أن تخبر شخص ما "لا يمكنك القيام بذلك"، لا توجد ممارسة آمنة للغاية. إذا كان شخص ما يسأل شيئا ما ليس لديهم إذن به، يجب أن يكون الاستجابة 404. من خلال الاستجابة مثل أن تمنح هذا الشخص "الغريب" الكثير من المعلومات.
فقط أضف ال and return
, ، مثل القيام به:
before_filter :must_have_permission_to_write
def must_have_permission_to_write
redirect_to login_path and return unless current_user
end
لا تنتمي إلى StackOverflow