Rails 3 - L'administrateur actif peut-il utiliser un modèle d'utilisateur existant?
Peut Active Admin actuel Concevoir modèle d'utilisateur? Il a déjà une colonne nommée admin
, et si c'est true
, j'aimerais contourner le login administrateur actif, en allant à /admin
.
est-ce possible?
lignes actuelles:
#Active admin
ActiveAdmin.routes(self)
#Devise
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users, :path => "account"
Le reste est essentiellement standard Concevoir + Active admin
4 réponses
Oui, vous pouvez le faire, lorsque exécuter le générateur sauter la création du modèle utilisateur:
rails generate active_admin:install --skip-users
puis 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!
uncement config.authentication_method
et fournir votre méthode d'authentification pour votre administrateur, 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. Jetez également un oeil à Active Admin Configuration
Espérons que cette aide.
comme indiqué précédemment, vous devrez mettre à jour votre config/initializers/active_admin.rb
pour refléter la méthode d'auth correcte.
en outre, cependant, vous voudrez 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 à mettre à jour ces (ou la méthode mentionnée dans le post), et juste il y a trop de méthodes ailleurs, mais cela semble être l'approche la plus facile / la plus propre. Vous devrez évidemment remplacer " user "dans chaque paramètre ( current_USER
) par le nom du modèle en utilisant l'authentification de devise.
je recommande également de mettre à jour le paramètre suivant pendant que vous êtes là:
# 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 requis si la méthode HTTP par défaut utilisée par votre la configuration de devise est définie à :delete
, ce qu'elle est à moins que vous ne la changiez. Il est important qu'ils soient maintenant synchronisés car si vous suivez ces instructions, vous utiliserez destroy_user_session_path
qui est un chemin déjà défini par devise. Sinon, vous recevrez un message indiquant que la route [GET] /users/sign_out n'existe pas.
Tout ce que tout le monde l'a dit et en conjonction avec le guide mis à 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 utilisateur simple lorsque vous avez déjà implémenté un modèle admin_user (c'est-à-dire que maintenant vous avez un 'utilisateur' aussi bien qu'un 'admin_user' modèle.)
Les étapes supplémentaires inclus
supprimer devise_for :admin_users, ActiveAdmin::Devise.config
des routes.RB
copier le code de app/admin/admin_user.rb
à app/admin/user.rb
(n'utiliser que ce qui est requis)
supprimer app/admin/admin_user.rb
(ou vous obtiendrez un erreur constante non initialisée sur administrateur ) comme ce type 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 le champ User.is_admin
sur votre modèle existant, et supprimer la table admin_user:
Roll Back admin_user migrations (si vous n'avez pas utilisé --skip-users
lors de l'installation Active Admin):
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
puis supprimer ces 3 fichiers.
dans l'acheminement, supprimer la ligne devise_for :admin_users, ActiveAdmin::Devise.config
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
Dans 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.
pour configurer la sortie de devise via :get
, ajouter dans la sortie de devise.rb:
config.sign_out_via = :get
# And for every occurrence of destroy_user_session_path, remove the option method: delete.
créer is_admin migration:
rails g migration add_is_admin_to_user is_admin:boolean
modifier la migration comme suit:
class AddIsAdminToUser < ActiveRecord::Migration
def change
add_column :users, :is_admin, :boolean, default: false
end
end
et migrer:
rake db:migrate
si dans les rails 4, n'oubliez pas pour ajouter is_admin dans permit_params. Dans app/admin/utilisateur.rb:
permit_params ....., :is_admin
ajouter des droits aux utilisateurs admin, dans une console:
u = User.find(42); u.is_admin = true; u.save
Profiter