web-dev-qa-db-ja.com

Rails 3-Active_adminは既存のユーザーモデルを使用できますか?

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です

52
Frexuz

はい、できます ジェネレータを実行する の場合、ユーザーモデルの作成をスキップします。

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 もご覧ください。

お役に立てれば。

70
JCorcuera

前述のように、正しい認証方法を反映するように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ルートが存在しないことを示すメッセージが表示されます。

26
jamesconant

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

楽しい

4

他の誰もが言ったことのすべてと、次の場所にあるガイドとの関連で 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.rbapp/admin/user.rb(必要なもののみを使用)削除app/admin/admin_user.rb(または、この人(そして私も)のように AdminUserで初期化されていない定数エラー )が表示されます。

4
Jay Killeen