Question

Can Admin Actif utiliser mon courant Devise modèle utilisateur? Il a déjà une colonne nommée admin, et si elle est true, je voudrais contourner la connexion d'administration active, en allant à /admin.

Est-ce possible?

Les itinéraires actuels:

#Active admin
ActiveAdmin.routes(self)

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

Le reste est essentiellement norme + administration active Devise

Était-ce utile?

La solution

Oui, vous pouvez le faire, quand l'exécution du générateur sauter la création d'un modèle utilisateur:

rails generate active_admin:install --skip-users

Alors dans votre 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!

uncomment config.authentication_method et fournir votre méthode d'authentification pour votre admin, par exemple:

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

Redémarrez votre serveur et il devrait fonctionner. Aussi Jetez un oeil à Active Configuration Administrateur

Hope this helps.

Autres conseils

Comme indiqué précédemment, vous devez mettre à jour votre config/initializers/active_admin.rb pour refléter la méthode d'authentification correcte.

De plus, cependant, vous souhaitez mettre à jour les paramètres suivants ainsi:

# 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

et

# 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

Bien sûr, vous n'avez pas à les mettre à jour (ou la méthode mentionnée dans le poste), et un peu plus-RIDE les méthodes ailleurs, mais cela semble être le plus facile / propre approche. Vous aurez évidemment besoin dans chaque paramètre pour remplacer « utilisateur » (de current_USER) avec le nom du modèle en utilisant l'authentification DEVISE.

Je recommande également la mise à jour les paramètres suivants et pendant que vous êtes là-bas:

# 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

Ce dernier changement est nécessaire si la méthode HTTP par défaut utilisé par votre config DEVISE est réglé sur :delete, dont il est à moins que vous changiez. Il importe qu'ils sont maintenant synchronisés parce que si vous suivez ces instructions, vous utiliserez destroy_user_session_path qui est un chemin déjà défini par legs. Sinon, vous obtiendrez un message indiquant que [GET] / utilisateurs / route sign_out n'existe pas.

Tout ce que tout le monde a dit, ainsi que conjointement avec le guide disposé à http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/

qui ajoute quelques bits supplémentaires sur l'information si vous choisissez de revenir à l'option d'avoir un modèle unique d'utilisateur lorsque vous avez déjà mis en œuvre un modèle de admin_user (c.-à-moment vous avez un « utilisateur » ainsi qu'un « admin_user «modèle).

Les étapes supplémentaires inclus

supprimer devise_for :admin_users, ActiveAdmin::Devise.config de routes.rb copier le code de app/admin/admin_user.rb à app/admin/user.rb (utiliser uniquement ce qui est nécessaire) suppression app/admin/admin_user.rb (ou vous obtiendrez un Uninitialized erreur constante sur AdminUser) comme ce gars-là avait (et moi aussi).

Voici le processus si vous avez déjà installé ActiveAdmin avec les paramètres par défaut, et que vous voulez authentifier les utilisateurs avec champ User.is_admin sur votre modèle existant et supprimer admin_user tableau:

Rollback migrations admin_user (si vous n'avez pas utilisé --skip-users lors de l'installation d'administration active):

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

Retirez ensuite les 3 fichiers.

routage, retirer la devise_for :admin_users, ActiveAdmin::Devise.config de ligne

Dans application_controller.rb, ajouter:

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

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

Concevoir de configurer pour vous déconnecter via :get, ajoutez devise.rb:

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

Créer la migration is_admin:

rails g migration add_is_admin_to_user is_admin:boolean

Modifier la migration comme ceci:

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

Et Migrate:

rake db:migrate

Si dans des rails 4, ne pas oublier d'ajouter is_admin dans permit_params. Dans app / admin / user.rb:

permit_params ....., :is_admin

Ajouter des droits aux utilisateurs admin, dans une console:

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

Profitez

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top