web-dev-qa-db-fra.com

Création d'un utilisateur administrateur dans Devise on Rails beta 3

Ok, je vais probablement me sentir assez bête quand quelqu'un répond à celui-ci avec une chose simple qui me manque mais ... voilà:

J'ai une toute nouvelle application sur la version bêta de Rails 3 et j'utilise le système pour l'authentification. J'ai lu 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 les instructions: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role ) et I ' Je me suis inscrit en tant que premier utilisateur, mais comment puis-je enregistrer ou créer un utilisateur de rôle administrateur? Les instructions fournies par les gars de la machine configurent le rôle d'administrateur pour qu'il ne soit pas enregistrable, mais je ne sais pas comment vous êtes censé créer l'administrateur si vous ne pouvez pas vous enregistrer?!

Toute aide serait appréciée! Merci!

44
erskingardner

Ouaip. Je me sens stupide. 

Si quelqu'un d'autre a un moment pareillement vaporeux. 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

Ça va le faire. Il suffit maintenant de visiter votre chemin de connexion administrateur et de vous connecter.

91
erskingardner

Ce que vous essayez réellement de faire est de créer des données de base ... Un moyen plus standard consiste à ajouter vos utilisateurs de base (et vos rôles, si vous les stockez) à db/seeds.rb

Par exemple, 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]}])

Puis lancez:

rake db:seed
13
paneer_tikka

Cela peut ne pas s'appliquer à Devise (mais je le crois bien), mais en général si vous voulez créer un compte administrateur mais ne voulez pas stocker votre mot de passe administrateur 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 l'utilisateur localement avec le mot de passe pour lequel vous souhaitez rechercher le mot de passe password_digest.

5
Lelon

@Stewart Vous avez raison. L'utilisation d'un indicateur d'administrateur dans le modèle d'utilisateur est acceptable et peut toujours coexister avec de nombreuses options d'autorisation. Jetez un coup d’œil à la classe Ability de la documentation cancan pour un exemple de ce à quoi 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érente ou si les conditions requises pour l'autorisation, telles que l'ajout d'un sous-domaine aux clés automatiques, sont différentes.

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

3
genkilabs

Il existe un moyen pratique pour remplir les tables - db/seed.rb file. Ajoutez simplement le script pour créer des utilisateurs et exécutez-le:

rake db:seed

Vous trouverez ci-dessous un exemple de modèle User avec les champs email et username:

# 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

Notez que les validations de schéma sont appliquées ici. 

Ici vous pouvez trouver plus d'exemples d'utilisation du fichier seed.rb et ici est le casting de Rails du rayon.

0
gotqn

essayez d’ajouter/sign_in à votre chemin d’administrateur, quel que soit votre choix ... le mien est

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

0
kinet