القضبان ترخيص البرنامج المساعد خطأ
-
20-09-2019 - |
سؤال
أنا أحاول الحصول على permit
طريقة العمل باستخدام القضبان-إذن-المساعد و authlogic, و أنا الوقوع في هذا الخطأ:
عندما أحاول:
class ApplicationController < ActionController::Base
...
before_filter permit 'admin'
...
أحصل على هذا:
Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash
الآن لدي current_user
طريقة الإعداد ، ويعمل لأنني استخدامها للتو عن أي مكان آخر في التطبيق:
class ApplicationController < ActionController::Base
...
helper_method :current_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
...
أنا أيضا أعرف أن لدي المستخدمين مع الأدوار المناسبة في قاعدة البيانات الخاصة بي ، لأن هذا الأسلوب يعمل:
def require_admin
unless current_user.is_admin? || current_user.is_root?
flash[:warning] = 'You are not an administrator and cannot access this page.'
redirect_to root_path
end
end
أنا يمكن أن تجعل كل عمل إذا أنا فقط التحقق على مستوى المستخدم باستخدام هذا:
before_filter :require_admin, :only => 'index'
...ولكن ألا يجب أن تكون قادرة على الشيء نفسه على نحو فعال مع permit
و permit?
?
أي مساعدة سيكون محل تقدير كبير.اسمحوا لي أن أعرف إذا كنت بحاجة لمعرفة المزيد من التعليمات البرمجية و سأكون سعيدا بعد ذلك.هناك حقا لا شيء على جوجل أستطيع أن جعل رؤساء أو ذيول فيما يتعلق بالحصول على هذين النظامين للعمل مع بعضها البعض.
المحلول
حسنا, أعتقد أنني اكتشفت ذلك.
كما جاريد بشكل صحيح أشار إلى الاستخدام السليم هو
permit 'admin'
(لا كجزء من before_filter
).
ومع ذلك...
...الافتراضي :get_user_method
يتم تعيين #current_user
, ، وهو ما acts_as_authenticated
يستخدم البرنامج المساعد.أنا كما لوحظ في وقت سابق ، ص باستخدام AuthLogic ، حيث لدي طريقة تعريف current_user
(بدون الجنيه).
لذا كنت قد حاولت التالية:
permit 'admin', :get_user_method => current_user
إلا أن يكون في استقبال لطيفة رسالة خطأ توضح أنه لم يكن مثل هذا المتغير أو الأسلوب.ما كنت في عداد المفقودين ، مع ذلك ، هو أن تجزئة الخيار يأخذ سلسلة, وليس دعوة مباشرة إلى الأسلوب!!(خطأ غبي أعلم!)
لذلك
permit 'admin', :get_user_method => 'current_user'
...يبدو أن العمل بالنسبة لي.
أنا أحب روبي على القضبان ، ولكن في بعض الأحيان بساطته يمكن أن تكون نقمة من تلقاء نفسها ؛ أنا دائما الحصول على تملكها الأشياء البسيطة.:)
نصائح أخرى
كنت تستخدم البرنامج المساعد بشكل غير صحيح.فإنه لا ينبغي أن توضع في قبل التصفية.
على المستوى العالمي ، يمكنك ببساطة تعلن:
permit 'admin'
هذا هو.
جميع الإجراءات الخاصة بك سوف نبحث عن current_user أو @كائن المستخدم وإعادة توجيه إلى صفحة تسجيل الدخول إذا لم يكن.
على مستوى العمل ، يمكنك استخدامه بمثابة كتلة:
def index
permit 'admin' do
@some_models = SomeModel.all
end
end