Rails 3 - Can Active_Admin использовать существующую пользовательскую модель?
-
27-10-2019 - |
Вопрос
Можно Активный администратор Используйте мой текущий Придумать пользовательская модель? У него уже есть столбец с именем 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
Наслаждаться