1

rails-authorization-pluginauthlogicpermitを使用してメソッドを機能させようとしていますが、このエラーが発生し続けます。

私がしようとすると:

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?うか?

どんな助けでも大歓迎です。さらにコードが必要な場合はお知らせください。喜んで掲載させていただきます。これら 2 つのシステムを相互に動作させることに関して、Google で私が首尾よくできることは何もありません。

4

2 に答える 2

2

わかりました、私はそれを理解したと思います。

Jaredが正しく指摘したように、適切な使用法は

permit 'admin'

( の一部としてではありませんbefore_filter)。

でも...

... デフォルトは、プラグインが使用する に:get_user_method設定されています。前述のように、私は AuthLogic を使用しており、メソッドは(ポンド記号なしで) として定義されています。#current_useracts_as_authenticatedcurrent_user

だから、私は次のことを試しました:

permit 'admin', :get_user_method => current_user

そのような変数やメソッドがないことを説明する素敵なエラーメッセージが表示されるだけです。しかし、私が見逃していたのは、ハッシュオプションがメソッドへの直接呼び出しではなく文字列を取るということです!! (愚かな間違い、私は知っています!)

そう

permit 'admin', :get_user_method => 'current_user'

...私にはうまくいくようです。

私は Ruby と Rails が大好きですが、その単純さ自体が呪いになることもあります。私はいつもシンプルなものに夢中です。:)

于 2009-10-10T17:58:36.407 に答える
0

プラグインを誤って使用しています。ビフォアフィルターには入れないでください。

グローバルレベルでは、次のように宣言するだけです。

permit 'admin'

それでおしまい。

すべてのアクションは、current_userまたは@userオブジェクトを探し、そうでない場合はログインページにリダイレクトします。

アクションごとのレベルでは、それをブロックとして使用します。

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
于 2009-10-10T00:25:53.190 に答える