سؤال

أريد مرشح قبل "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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top