سؤال

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