Разработайте и Active Admin, используя одну ошибку модели - PullRequest
0 голосов
/ 05 декабря 2018

Моему приложению требуется одна модель для Devise и Active Admin для пользователя, и я хочу различать супер-администратора, администратора и пользователя в зависимости от роли, которая присутствует в модели профиля, и я следовал по по этой ссылкеДэн Доэзема .Пожалуйста, помогите мне, поскольку я новичок в мире рельсов и не знаю, что делать в этой проблеме.Я удалил пользователя admin, который был создан по умолчанию.Мой файл user.rb в папке app / admin:

    ActiveAdmin.register User do
        form do |f|
            f.inputs "User Details" do
                f.input :email
            end
            f.buttons
        end
    end

Здесь я использовал пользователя, потому что я хочу использовать пользователя, сгенерированного устройством.Мой файл users.rb в app / admin:

    ActiveAdmin.register User do
        permit_params :email
        index do
            selectable_column
            id_column
            column :email
            column :current_sign_in_at
            column :sign_in_count
            column :created_at
            actions
        end
        filter :email
        filter :current_sign_in_at
        filter :sign_in_count
        filter :created_at
        form do |f|
            f.inputs do
                f.input :email
                end
                f.actions
            end
        end

Я не изменил файл dashboard.rb в app / admin.Файл application_controller.rb:

    class ApplicationController < ActionController::Base
        protect_from_forgery with: :exception
        def authenticate_admin_user!
            authenticate_user!
            unless current_user.profile.role == 'super_admin'
                flash[:alert] = "Unauthorized Access!"
                redirect_to root_path
            end
        end
    end

Я удалил следующий маршрут из файлаways.rb

    devise_for :admin_users, ActiveAdmin::Devise.config

Я также уничтожил модель AdminUser

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете настроить параметры Active Admin в config/initializers/active_admin.rb.См. Активная аутентификация администратора

В частности, вы захотите установить: config.authentication_method и config.current_user_method, чтобы соответствовать методам, которые вы определяете в ApplicationController.

* 1010.* Пример:

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  protected

  def authenticate_admin_user!
    authenticate_user!
    unless current_user.profile.role == 'super_admin'
      flash[:alert] = "Unauthorized Access!"
      redirect_to root_path
    end
  end

  def current_admin_user
    return unless current_user&.profile.role == 'super_admin'
    current_user
  end
end

config / initializers / active_admin.rb

config.authentication_method = :authenticate_admin_user!
config.current_user_method = :current_admin_user

Кроме того, вы можете просто аутентифицировать текущего пользователя и авторизовать представления администратора с помощьюроль.См. Адаптер авторизации активного администратора

...