7

その質問で私を助けてください:

私は2つのモデル(管理者とユーザー)を持っています->deviseで作成され、post_controllerがあります:

そして疑問が生じます:

モデルが1つある場合( user.rb )->コントローラーに次のように入力します:

before_filter :authenticate_user!, :except => [:show, :index]  

しかし、私には2つのモデルがあり、ユーザーがポストコントローラーの「表示」および「インデックス」アクションにアクセスし、管理者がすべてのアクションにアクセスできるようにしたいと考えています。

そして私はそのようなことをします:

   before_filter :logged_in
.
.
.
    private
        def logged_in
          if admin_signed_in?

          else 
            authenticate_user!
          end   
        end

しかし、私は自分の文字列を変更したい:

authenticate_user!

そのようなものに:

:authenticate_user!, :except => [:show, :index]
ただし、 before_filter を参照する以外

どうすればできますか (「cancan」gem なし)

4

1 に答える 1

16

2 つの before フィルターを使用してみてください。1 つは管理者のみのアクション用で、もう 1 つは管理者またはユーザーのアクション用です。

# ensure admin for other actions
before_filter :check_admin_logged_in!, :except => [:show, :index]

# ensure user or admin logged in for these actions (:only option is optional)
before_filter :check_user_logged_in!, :only => [:show, :index]

private
    def check_admin_logged_in! # admin must be logged in
        authenticate_admin!
    end
    def check_user_logged_in! # if admin is not logged in, user must be logged in
      if !admin_signed_in?
        authenticate_user!
      end   
    end
于 2012-09-05T09:55:46.303 に答える