2012-02-23 9 views
18

をアクティブに管理者へのアクセスを制限する方法trueにその属性<code>is_admin</code>セットを持っているだけで、私のユーザーは私のアクティブな管理者のバックエンドにアクセスできるようにすることを私はしたい管理ユーザーへ

私はこれをどのようにしたらよいでしょうか?

「通常」のユーザーは、アクティブな管理者ではなく、サイトにログインすることができます。

答えて

38

! ApplicationControllerでは、ActiveAdminはユーザーが管理ページに移動できるかどうかをチェックします。このように:

# restrict access to admin module for non-admin users 
def authenticate_admin_user! 
    raise SecurityError unless current_user.try(:admin?) 
end 

とApplicationControllerにでその例外からの救出(またはあなたが実際にauthenticate_admin_user!メソッドの内部でリダイレクトすることができます)

rescue_from SecurityError do |exception| 
    redirect_to root_url 
end 

そして、もう一つの小さなこと、あなたがして、admin_usersを持っていない場合config/initializers/active_admin.rbにこの行を変更するとよいでしょう:

config.current_user_method = :current_user 

と工夫で、あなたは管理者のデフォルトのパスが異なるようにしたいかもしれません/非管理者ユーザーは、adminユーザーがあまりにもサイトのフロント部分を使用することができるはずなので、私がやりたいことはありませんコントローラ

# path for redirection after user sign_in, depending on user role 
def after_sign_in_path_for(user) 
    user.admin? ? admin_dashboard_path : root_path 
end 
+0

これは良い解決策のようですが、current_userはApplicationController内で利用できないようです...他の場所に置くことはできませんか? –

+0

mmコントローラは実際には最も使用される場所です。どのような問題がありますか?それはnilまたはNoMethodErrorを返しますか? – alony

+0

nilを返します。 '未定義のメソッド 'admin?' nilのための:NilClass'。私は.adminを定義しましたか?それはそうではありません。私は、ApplicationControllerで利用できないcurrent_userのいくつかのケースを見つけました。あなたがそこからアクセスすることになっていないようです。 –

0

「通常の」ユーザーの場合は、サイトにログインするための別のロジックを記述する必要があります。または、ユーザーがアクティブな管理者を介してログインできるようにする理由がわからないことがあります。 アクティブな管理者deviseを使用して、Userという別のモデルを作成してください。あなたはauthenticate_admin_userという名前のメソッドを作成した場合ので、

config.authentication_method = :authenticate_admin_user! 

:あなたは、このような設定を持っているconfig/initializers/active_admin.rb

+0

んでafter_sign_in_path_for方法を定義することができるように。私は1つのユーザーモデルしか持たないことをお勧めします。 –

関連する問題