Frage

dürfen Aktiver Administrator Verwenden Sie meinen Strom Entwickeln Benutzermodell? Es hat bereits eine Spalte mit dem Namen admin, und wenn es ist true, Ich möchte die aktive Administratoranmeldung umgehen, wenn ich gehe, /admin.

Ist das möglich?

Aktuelle Routen:

#Active admin
ActiveAdmin.routes(self)

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

Der Rest ist im Grunde standardmäßige Devise + Active Administrator

War es hilfreich?

Lösung

Ja, das können Sie tun, wenn Ausführen des Generators Überspringen Sie die Erstellung des Benutzermodells:

rails generate active_admin:install --skip-users

Dann in deinem 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!

Überzeugung config.authentication_method und geben Sie beispielsweise Ihre Authentifizierungsmethode für Ihren Administrator an:

# app/controllers/application_controller.rb
def authenticate_admin!
 redirect_to new_user_session_path unless current_user.is_admin?
end

Starten Sie Ihren Server neu und es sollte funktionieren. Schauen Sie sich auch an zu Aktive Administratorkonfiguration

Hoffe das hilft.

Andere Tipps

Wie bereits erwähnt, müssen Sie Ihre aktualisieren config/initializers/active_admin.rb um die richtige Auth -Methode widerzuspiegeln.

Darüber hinaus möchten Sie jedoch auch die folgenden Einstellungen aktualisieren:

# This setting changes the method which Active Admin calls
# to return the currently logged in user.
config.current_user_method = :current_admin_user

zu

config.current_user_method = :current_user

und

# 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

zu

config.logout_link_path = :destroy_user_session_path

Natürlich müssen Sie diese (oder die in der Post genannte Methode) nicht aktualisieren und die Methoden an anderer Stelle nur überfahren, aber dies scheint der einfachste / sauberste Ansatz zu sein. Sie müssen in jeder Einstellung offensichtlich "Benutzer" ersetzen (current_USER) mit dem Namen des Modells unter Verwendung der Devise -Authentifizierung.

Ich würde auch empfehlen, die folgende Einstellung zu aktualisieren, während Sie dort sind:

# This setting changes the http method used when rendering the
# link. For example :get, :delete, :put, etc..
#
# Default:
config.logout_link_method = :get

zu

config.logout_link_method = :delete

Diese letzte Änderung ist erforderlich, wenn die Standard -HTTP -Methode, die von Ihrer Devise -Konfiguration verwendet wird :delete, was es ist, es sei denn, du hast es geändert. Es ist wichtig, dass sie jetzt synchronisiert sind, denn wenn Sie diese Anweisungen befolgen, werden Sie verwenden destroy_user_session_path Dies ist ein von Devise bereits definierter Weg. Andernfalls erhalten Sie eine Nachricht, in der besagt, dass [GET] /User /Sign_out Route nicht vorhanden ist.

Alles, was alle anderen und in Verbindung mit dem Führer gesagt habenhttp://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-lail-activeadmin-andvise/

Dies fügt einige zusätzliche Informationen zu Informationen hinzu, wenn Sie sich entscheiden, um ein einzelnes Benutzermodell zurückzukehren, wenn Sie bereits ein Admin_User -Modell implementiert haben (dh im Moment haben Sie einen "Benutzer" sowie ein "Admin_User" -Modell). .

Die zusätzlichen Schritte enthalten

Löschen devise_for :admin_users, ActiveAdmin::Devise.config von Routes.rb Copy Code von app/admin/admin_user.rb zu app/admin/user.rb (Verwenden Sie nur das, was erforderlich ist) Löschen app/admin/admin_user.rb (Oder Sie erhalten eine Nicht initialisierter konstanter Fehler beim Administrator) wie dieser Typ hatte (und ich auch).

Hier ist der Vorgang, wenn Sie ActiveADmin bereits mit Standardeinstellungen installiert haben und Benutzer mit authentifizieren möchten User.is_admin Feld auf Ihrem vorhandenen Modell und entfernen Sie die Tabelle admin_user:

Rollback admin_User -Migrationen (wenn Sie nicht verwendet haben --skip-users Beim Installieren von aktivem Administrator):

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

Entfernen Sie dann diese 3 Dateien.

Entfernen Sie im Routing die Linie devise_for :admin_users, ActiveAdmin::Devise.config

In application_controller.rb hinzufügen:

def authenticate_admin!
  if current_user && current_user.is_admin
    # fine
  else
    redirect_to new_user_session_path
  end
end

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

So konfigurieren Sie Devise, um sich über anzumelden :get, fügen Sie in Devise.rb hinzu:

config.sign_out_via = :get
# And for every occurrence of destroy_user_session_path, remove the option method: delete.

Erstellen Sie IS_ADMIN -Migration:

rails g migration add_is_admin_to_user is_admin:boolean

Bearbeiten Sie die Migration wie SO:

class AddIsAdminToUser < ActiveRecord::Migration
  def change
    add_column :users, :is_admin, :boolean, default: false
  end
end

Und migrieren:

rake db:migrate

Wenn Sie in Schienen 4 sind, vergessen Sie nicht, IS_ADMIN in Genehmigungs_Params hinzuzufügen. In App/admin/user.rb:

permit_params ....., :is_admin

Fügen Sie den Verwaltungsbenutzern in einer Konsole Rechte hinzu:

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

Genießen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top