Подтвердить что ты не робот

Создание пользователя admin в Devise on Rails beta 3

Хорошо, я, вероятно, буду чувствовать себя совершенно немым, если кто-то ответит на этот вопрос простой штукой, которую я пропущу, но... здесь идет:

У меня есть новое приложение на бета-версии rails 3, и я использую программу для аутентификации. Я запустил все комментарии, и на данный момент все работает отлично. Я создал роль пользователя и роль администратора (следуя этим инструкциям: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role), и я зарегистрировался как первый пользователь, но как мне зарегистрироваться или создать пользователя роли администратора? Направляющие из созданных парней настраивают роль администратора, чтобы не регистрироваться, но я не уверен, как вы должны создавать администратора, если вы не можете зарегистрироваться?

Любая помощь будет оценена! Спасибо!

4b9b3361

Ответ 1

Угу. Я чувствую себя глупым.

Если у кого-то еще есть такой же тёмный момент. Просто используйте консоль rails для создания пользователя 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

Это будет сделано. Теперь просто зайдите в свой админ-знак и войдите в систему.

Ответ 2

То, что вы действительно пытаетесь сделать, это создать данные семян. Более стандартный способ сделать это - добавить своих семенных пользователей (и роли, если вы их храните), в db/seeds.rb

Для exmaple в 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]}])

Затем запустите:

rake db:seed

Ответ 3

Это может не относиться к Devise (но я полагаю, что это произойдет), но в общем случае, если вы хотите засеять пользователя admin, но не хотите хранить свой пароль администратора в контроле источника, вы можете сделать что-то вроде этого..

@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

Вы можете создать пользователя локально с паролем, который вы хотите найти password_digest.

Ответ 4

@Stewart Вы правы. Использование флага администратора в пользовательской модели является приемлемым и может сосуществовать со многими параметрами авторизации. Взгляните на класс "Способность" в документах cancan для примера того, как это может выглядеть:

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

Наличие нескольких моделей авторизации может быть полезно, если функциональность действительно различна или требования к авторизации, такие как добавление поддомена к ключам authkey, различны.

Другой подход - добавить отношение роли HABTM к вашему пользователю. Вот хороший учебник Тони Амоаль: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

Ответ 6

Существует удобный способ для заполнения таблиц - db/seed.rb. Просто добавьте script для создания пользователей в нем и выполните:

rake db:seed

Ниже вы можете увидеть пример модели User с полями email и 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

Обратите внимание, что здесь применяются методы проверки.

Здесь вы можете найти больше примеров использования файла seed.rb и здесь - это rayn rails cast.