質問

私はそれを手に入れようとしています permit を使用して作業する方法 レール認証プラグイン そして 本物の論理, 、そして私はこのエラーに遭遇し続けます:

試してみると:

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

助けていただければ幸いです。さらにコードを確認する必要がある場合はお知らせください。喜んで投稿させていただきます。Google には、これら 2 つのシステムを相互に連携させることに関して、私が判断できる情報はまったくありません。

役に立ちましたか?

解決

さて、分かったと思います。

Jared が正しく指摘したように、適切な使用法は次のとおりです。

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'

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

私は Ruby と Rails が大好きですが、そのシンプルさが災いしてしまうこともあります。私はいつもシンプルなものに夢中になります。:)

他のヒント

あなたは間違ってプラグインを使用しています。これは、前のフィルタには設置しないでください。

グローバルレベルでは、あなたは、単に宣言します:

permit 'admin'

それはそれだ。

あなたの行動のすべては、CURRENT_USERまたは@userオブジェクトを探し、ない場合は、ログインページにリダイレクトされます。

ごとの行動レベルでは、あなたがブロックとしてそれを使用します:

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top