Active Admin現在のDeviseユーザーモデルを使用できますか?すでにadmin
という名前の列があり、true
の場合、/admin
に移動するときにアクティブな管理者ログインをバイパスします。
これは可能ですか?
現在のルート:
#Active admin
ActiveAdmin.routes(self)
#Devise
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users, :path => "account"
残りは基本的に標準のDevise + Active adminです
はい、できます ジェネレータを実行する の場合、ユーザーモデルの作成をスキップします。
Rails generate active_admin:install --skip-users
次に、config/initializers/active_admin.rb
:
# == User Authentication
#
# Active Admin will automatically call an authentication
# method in a before filter of all controller actions to
# ensure that there is a currently logged in admin user.
#
# This setting changes the method which Active Admin calls
# within the controller.
config.authentication_method = :authenticate_admin!
コメント解除config.authentication_method
そして、あなたの管理者にあなたの認証方法を提供してください、例えば:
# app/controllers/application_controller.rb
def authenticate_admin!
redirect_to new_user_session_path unless current_user.is_admin?
end
サーバーを再起動すると、サーバーが機能するはずです。 Active Admin Configuration もご覧ください。
お役に立てれば。
前述のように、正しい認証方法を反映するようにconfig/initializers/active_admin.rb
を更新する必要があります。
ただし、次の設定も更新する必要があります。
# This setting changes the method which Active Admin calls
# to return the currently logged in user.
config.current_user_method = :current_admin_user
に
config.current_user_method = :current_user
そして
# This setting changes the path where the link points to. If it's
# a string, the strings is used as the path. If it's a Symbol, we
# will call the method to return the path.
#
# Default:
config.logout_link_path = :destroy_admin_user_session_path
に
config.logout_link_path = :destroy_user_session_path
もちろん、これら(または投稿で言及されているメソッド)を更新する必要はなく、他の場所でメソッドをオーバーライドするだけですが、これが最も簡単でクリーンなアプローチのようです。各設定(current_USER
)の "user"を、デバイス認証を使用するモデルの名前に置き換える必要があることは明らかです。
また、次の設定も更新することをお勧めします。
# This setting changes the http method used when rendering the
# link. For example :get, :delete, :put, etc..
#
# Default:
config.logout_link_method = :get
に
config.logout_link_method = :delete
この最後の変更は、デバイス設定で使用されるデフォルトのHTTPメソッドが:delete
に設定されている場合に必要です。これらの手順に従うと、すでにdeviseで定義されているパスであるdestroy_user_session_path
を使用するため、これらが同期されていることが重要です。そうしないと、[GET]/users/sign_outルートが存在しないことを示すメッセージが表示されます。
ActiveAdminをデフォルト設定でインストール済みで、既存のモデルのUser.is_admin
フィールドでユーザーを認証し、admin_userテーブルを削除する場合のプロセスは次のとおりです。
Admin_userの移行をロールバックする(Active Adminのインストール時に--skip-users
を使用しなかった場合):
rake db:migrate:down VERSION=20141205110842 # create_active_admin_comments.rb
rake db:migrate:down VERSION=20141205110831 # add_devise_to_admin_users.rb
rake db:migrate:down VERSION=20141205110820 # devise_create_admin_users.rb
次に、これらの3つのファイルを削除します。
ルーティングで、行devise_for :admin_users, ActiveAdmin::Devise.config
を削除します
Application_controller.rbに、以下を追加します。
def authenticate_admin!
if current_user && current_user.is_admin
# fine
else
redirect_to new_user_session_path
end
end
Active_admin.rb内:
config.authentication_method = :authenticate_admin!
config.current_user_method = :current_user
config.logout_link_path = :destroy_user_session_path
config.allow_comments = false
config.logout_link_method = :get # couldn't get active_admin to sign out via :delete. So I configure devise to sign out via :get.
:get
からサインアウトするようにdeviseを構成するには、devise.rbを追加します。
config.sign_out_via = :get
# And for every occurrence of destroy_user_session_path, remove the option method: delete.
Is_adminマイグレーションを作成します。
Rails g migration add_is_admin_to_user is_admin:boolean
次のように移行を編集します。
class AddIsAdminToUser < ActiveRecord::Migration
def change
add_column :users, :is_admin, :boolean, default: false
end
end
そして移行:
rake db:migrate
Rails 4の場合は、permit_paramsにis_adminを追加することを忘れないでください。app/ admin/user.rbで:
permit_params ....., :is_admin
コンソールで管理者ユーザーに権限を追加します。
u = User.find(42); u.is_admin = true; u.save
楽しい
他の誰もが言ったことのすべてと、次の場所にあるガイドとの関連で http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model- with-Rails-activeadmin-and-devise /
すでにadmin_userモデルを実装している場合(つまり、現在、「user」モデルと「admin_user」モデルがある場合)に、シングルユーザーモデルを使用するオプションに戻すことを選択すると、情報にいくつかの追加ビットが追加されます。 。
含まれる追加の手順
削除する devise_for :admin_users, ActiveAdmin::Devise.config
from routes.rbからコードをコピーapp/admin/admin_user.rb
〜app/admin/user.rb
(必要なもののみを使用)削除app/admin/admin_user.rb
(または、この人(そして私も)のように AdminUserで初期化されていない定数エラー )が表示されます。