2010-04-25 2 views
44

Ok, je vais sans doute de se sentir tout à fait stupide quand quelqu'un répond à celui-ci avec une chose simple que je suis absent, mais ... va ici:Création d'un utilisateur admin dans les versions bêta Rails Devise 3

I J'ai une toute nouvelle application sur rails 3 bêta et j'utilise un appareil pour l'authentification. J'ai couru tous les commentaires et tout fonctionne parfaitement pour le moment. J'ai créé un rôle d'utilisateur et un rôle d'administrateur (en suivant ces instructions: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role) et je me suis enregistré en tant que premier utilisateur, mais comment enregistrer ou créer un utilisateur de rôle d'administrateur? Les directions des gars de configuration configurent le rôle d'administrateur pour ne pas être enregistrable mais je ne sais pas comment vous êtes censé créer l'admin si vous ne pouvez pas vous enregistrer ?!

Toute aide serait appréciée! Merci!

Répondre

91

Eh oui. Je me sens stupide.

Si quelqu'un d'autre a un moment insipide similaire. Il suffit d'utiliser la console rails pour créer l'utilisateur admin:

➡ rails c 
Loading development environment (Rails 3.0.0.beta3) 
irb(main):001:0> admin = Admin.create! do |u| 
irb(main):002:1* u.email = '[email protected]' 
irb(main):003:1> u.password = 'password' 
irb(main):004:1> u.password_confirmation = 'password' 
irb(main):005:1> end 

Cela va le faire. Maintenant, il suffit de visiter votre chemin d'accès administrateur et connectez-vous.

+23

Le vote ne faisait pas référence à la première phrase de votre réponse. – lbz

+3

En réalité, quelle proportion d'un site de rails est réellement géré à l'aide de la console rails? Vous savez, ces petites choses, un champ de drapeau ici et là? –

+0

Probablement une quantité terrifiante est gérée par la console. Je sais que je l'utilise tout le temps. Mais je suppose que nous devrions remercier @dhh pour avoir créé un si bon moyen d'accéder à nos applications Rails. – erskingardner

0

essayer appending/sign_in à votre chemin d'administration, tout ce que vous mettez à ... le mien est

http://yoursite.com/admin/sign_in?unauthenticated=true

+0

oups vous n'avez probablement pas utilisé: authentifiable. Essayez cette page pour obtenir de l'aide sur la substitution des vues d'administration: http://wiki.github.com/fortuity/subdomain-authentication/tutorial-walkthrough – kinet

+0

Non, je n'ai pas utilisé: authenticatable lors de la configuration du modèle d'administration avec l'outil, comme J'ai dit, j'utilisais le tutoriel que divise a sur leur page github. Je préférerais ne pas utiliser de sous-domaines si je peux l'aider ... – erskingardner

3

@Stewart Vous avez raison. L'utilisation d'un indicateur d'administration dans le modèle utilisateur est acceptable et peut toujours coexister avec de nombreuses options d'autorisation. Jetez un oeil à la classe de capacité dans les cancan docs pour un exemple de la façon dont cela pourrait ressembler:

def initialize(user) 
    if user.admin? 
    can :manage, :all 
    else 
    can :read, :all 
    end 
end 

Avoir plusieurs modèles d'autorisation peut être utile si la fonctionnalité est vraiment différent ou si les conditions d'autorisation, telles que l'ajout sous-domaine aux authkeys, est différent.

Une autre approche consiste à ajouter une relation de rôles HABTM à votre utilisateur. Voici un joli tutoriel de Tony Amoyal: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

5

Ceci peut ne pas s'appliquer à Devise (mais je crois qu'il le sera), mais en général si vous voulez semer un utilisateur admin mais ne voulez pas stocker votre mot de passe admin dans le contrôle de source, vous pouvez faire quelque chose comme ça ...

@user = User.find_by_email("[email protected]") 

unless @user 
    # We are going to bypass both our assignment protection and validation 
    # so we aren't storing the password in source control. 
    # 
    # This doesn't replace the need to change the password occasionaly, both 
    # on the site and in source control. 
    @user = User.create do |u| 
    u.name = "Admin User" 
    u.email = "[email protected]" 
    u.password_digest = "$2a$10$DUv/IUiLB34jhi3j4Z8MwwcaDlBmFe3rvcdXSzPKLzBOAMmD53UqW" 
    end 

    @user.save(:validate => false) 

    # TODO make the user an admin 
end 

vous pouvez créer localement l'utilisateur avec le mot de passe que vous voulez trouver le password_digest.

+0

conçoit-il utiliser md5 pour digérer le mot de passe? – fatman13

13

Ce que vous essayez vraiment de faire est de créer des données de départ. Une façon plus standard pour ce faire serait d'ajouter vos utilisateurs de semences (et les rôles, si vous les stockez) db/seeds.rb

Pour exmaple dans db/seeds.rb:

roles = Role.create([{name: 'super_admin'}, {name: 'staff'}, {name:'customer'}]) 
users = User.create([{email: '[email protected]', first_name: 'super', last_name: 'admin', password: '@dmin123', password_confirmation: '@dmin123', role: roles[0]}]) 

Ensuite, exécutez:

rake db:seed 
+1

C'est la bonne façon de le faire. – 0112

0

Il est moyen pratique pour renseigner les tables - fichier db/seed.rb.Il suffit d'ajouter le script pour la création d'utilisateurs et exécutez:

rake db:seed 

Ci-dessous vous pouvez voir l'exemple de modèle avec Useremail et username champs:

# Inserting default security users 
users = { 

    admin: { 

     username: 'admin', 
     email: '[email protected]', 
     password: 'adminpass', 
     password_confirmation: 'adminpass', 
     is_admin: true 
    }, 

    administrator: { 

     username: 'administrator', 
     email: '[email protected]', 
     password: 'administrator', 
     password_confirmation: 'administrator', 
     is_admin: true 
    } 
} 

users.each do |user, data| 

    user = User.new(data) 

    unless User.where(email: user.email).exists? 
    user.save! 
    end 
end 

Note, qui méditent sont appliquées ici validations.

Here Vous pouvez trouver plus d'exemples d'utilisation du fichier seed.rb et here est la fonte des rails rayn. Ou

Questions connexes