2012-02-12 2 views
9

Я установил ActiveAdmin на ранней стадии моего проекта и использовал модель для проверки подлинности по умолчанию admin_users. С тех пор я использовал Devise для создания отдельной модели пользователя и понял, что, вероятно, было бы намного умнее объединить две таблицы, так что администратор может иметь административные действия как в Activeadmin, так и в интерфейсе сайта. Как настроить ActiveAdmin для использования модели «Пользователи», возможно, для столбца, в котором должен быть флаг администратора (например, is_admin или событие для уровня разрешений для создания администраторов и модераторов)?Объединение пользователей ActiveAdmin с существующей моделью пользователей

Rails 3.1 
ActiveAdmin 0.3.3 
Devise 1.4.9 

ответ

9

Для быстрого кода кода, как это сделать, используя существующую модель «User» с activeadmin, ответ на самом деле очень прост. В ApplicationController:

class ApplicationController < ActionController::Base 
    def authenticate_admin_user! #use predefined method name 
     redirect_to '/' and return if user_signed_in? && !current_user.is_admin? 
     authenticate_user! 
    end 
    def current_admin_user #use predefined method name 
     return nil if user_signed_in? && !current_user.is_admin? 
     current_user 
    end 
end 

И просто используйте то, что Devise уже настроил для аутентификации. redirect_to - это то, куда вы хотите отправить пользователей, которые подписали ARE, и НЕ имеют административные привилегии.

4

ActiveAdmin давайте вам define your own authentication methods. Вы можете перенести свои пользовательские таблицы на дополнительный столбец администратора и пометить существующие администраторы как таковые в нем, а затем установить методы проверки подлинности (как указано) в config/initializers/active_admin.rb.

+0

+1 потому что я верю вам, что вы даете мне правильный ответ. Я предполагаю, что я создаю новый метод в 'application_controller'? Но что мне нужно делать, чтобы интегрировать текущую аутентификацию Devise без переопределения существующих действий, установленных на месте при разработке? –

+0

Если существующие методы Devise работают, вы можете просто передать их в качестве символов в ActiveAdmin. В противном случае вы можете переопределить их или определить новые методы где-то, что имеет смысл для вашего приложения ('ApplicationController' - довольно распространенное место). – coreyward

 Смежные вопросы

  • Нет связанных вопросов^_^