Подтвердить что ты не робот

Rails 3 - Может ли Active_admin использовать существующую модель пользователя?

Может ли Active Admin использовать мою текущую модель Devise? У него уже есть столбец с именем admin, и если он true, я бы обошел логин Active admin при переходе на /admin.

Возможно ли это?

Текущие маршруты:

#Active admin
ActiveAdmin.routes(self)

#Devise
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users, :path => "account"

Остальное в основном стандартное Devise + Active admin

4b9b3361

Ответ 1

Да, вы можете это сделать, когда запускает генератор, пропустите создание модели пользователя:

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!

uncomment 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

Надеюсь, что это поможет.

Ответ 2

Как уже говорилось ранее, вам нужно будет обновить ваш config/initializers/active_admin.rb, чтобы отобразить правильный метод auth.

Кроме того, вы также захотите обновить следующие настройки:

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

Конечно, вам не нужно обновлять их (или метод, упомянутый в сообщении), и просто перематывать методы в другом месте, но это, по-видимому, самый простой/чистый подход. Вам, очевидно, нужно будет заменить "user" в каждой настройке (current_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, которое оно есть, если вы не изменили его. Важно, что теперь они синхронизируются, потому что, если вы будете следовать этим инструкциям, вы будете использовать destroy_user_session_path, который является путем, уже определенным при разработке. В противном случае вы получите сообщение о том, что маршрут [GET]/users/sign_out не существует.

Ответ 3

Все, что говорили все остальные, а также в связи с руководством, изложенным в http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/

который добавляет некоторые дополнительные биты в информацию, если вы решили вернуться к опции, чтобы иметь одну модель пользователя, когда вы уже внедрили модель admin_user (то есть прямо сейчас у вас есть "пользователь", а также "admin_user" ').

Дополнительные шаги включены

удалите devise_for :admin_users, ActiveAdmin::Devise.config с маршрутов .rb скопируйте код от app/admin/admin_user.rb до app/admin/user.rb (используйте только то, что требуется) delete app/admin/admin_user.rb (или вы получите Неинициализированную постоянную ошибку в AdminUser), как этот парень (и меня тоже).

Ответ 4

Здесь процесс, если вы уже установили ActiveAdmin с настройками по умолчанию, и хотите аутентифицировать пользователей с полем User.is_admin в вашей существующей модели и удалить таблицу admin_user:

Откат отладки admin_user (если вы не использовали --skip-users при установке Active Admin):

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

Если в рельсах 4, не забудьте добавить is_admin в allow_params. В приложении /admin/user.rb:

permit_params ....., :is_admin

Добавить права администратора пользователям в консоли:

u = User.find(42); u.is_admin = true; u.save

Enjoy