Создание пользователя-администратора в Devise on Rails beta 3 - PullRequest
44 голосов
/ 25 апреля 2010

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

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

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

Ответы [ 6 ]

91 голосов
/ 02 мая 2010

Да. Я чувствую себя глупо

Если у кого-то еще такой же момент. Просто используйте консоль rails для создания пользователя с правами администратора:

➡ 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 = 'sample@sample.com'
irb(main):003:1> u.password = 'password'
irb(main):004:1> u.password_confirmation = 'password'
irb(main):005:1> end

Это сделает это. Теперь просто посетите ваш админ, войдите в систему и войдите.

13 голосов
/ 08 июня 2012

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

Например, в db / seed.rb:

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

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

rake db:seed
5 голосов
/ 13 сентября 2011

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

@user = User.find_by_email("admin@email.com")

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 = "admin@email.com"
    u.password_digest = "$2a$10$DUv/IUiLB34jhi3j4Z8MwwcaDlBmFe3rvcdXSzPKLzBOAMmD53UqW"
  end

  @user.save(:validate => false)

  # TODO make the user an admin
end

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

3 голосов
/ 09 ноября 2010

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

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

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

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

0 голосов
/ 04 июля 2014

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

rake db:seed

Ниже приведен пример модели User с полями email и username:

# Inserting default security users
users = {

    admin: {

        username: 'admin',
        email: 'admin@gmail.com',
        password: 'adminpass',
        password_confirmation: 'adminpass',
        is_admin: true
    },

    administrator: {

        username: 'administrator',
        email: 'administrator@gmail.com',
        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, а здесь - состав рельсов Рейна.

0 голосов
/ 26 апреля 2010

попробуйте добавить / sign_in к вашему пути администратора, независимо от того, что вы его установили ... у меня есть

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...