Rails 3 - Can Active_Admin использовать существующую пользовательскую модель?

StackOverflow https://stackoverflow.com/questions/8360787

Вопрос

Можно Активный администратор Используйте мой текущий Придумать пользовательская модель? У него уже есть столбец с именем admin, и если это true, Я хотел бы обойти активное вход в администратор, когда собираюсь /admin.

Это возможно?

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

#Active admin
ActiveAdmin.routes(self)

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

Остальное в основном стандартное разработка + активный администратор

Это было полезно?

Решение

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

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

Перезагрузите ваш сервер, и он должен работать. Также взгляните на Активная конфигурация администратора

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

Другие советы

Как указывалось ранее, вам нужно будет обновить свой 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) с именем модели с использованием аутентификации разработки.

Я также рекомендую обновить следующую настройку, пока вы там:

# 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 не существует.

Все, что все остальные говорили, а также в сочетании с гидом, выложенным в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 с routes.rb Код копирования из app/admin/admin_user.rb к app/admin/user.rb (Используйте только то, что требуется) Удалить app/admin/admin_user.rb (или вы получите Ненициализированная постоянная ошибка на администраторе) как у этого парня (и я тоже).

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

Rollback Admin_user Migrations (если вы не использовали --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

In anative_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, добавить в depise.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, не забудьте добавить is_admin в wormit_params. В приложении/admin/user.rb:

permit_params ....., :is_admin

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

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

Наслаждаться

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top