在Devise on Rails beta 3中创建管理员用户

时间:2010-04-25 13:42:38

标签: ruby-on-rails devise

好吧,当有人用一个我想念的简单的东西回答这个问题时,我可能会感到非常愚蠢但是......这里有:

我在rails 3 beta上有一个全新的应用程序,我正在使用设计进行身份验证。我已经完成了所有评论,目前一切都很完美。我已经创建了一个用户角色和一个管理员角色(遵循这些说明:https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role)并且我已将自己注册为第一个用户但是如何注册或创建管理员角色用户?来自设计人员的指示设置管理员角色不可注册但我不确定如果你不能注册你应该如何创建管理员?!

任何帮助将不胜感激!谢谢!

6 个答案:

答案 0 :(得分:91)

烨。我感到愚蠢。

如果其他人有类似的无聊时刻。只需使用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

那就行了。现在只需访问您的管理员登录路径并登录。

答案 1 :(得分:13)

您真正想要做的是创建种子数据。 更标准的方法是将种子用户(和角色,如果要存储它们)添加到db / seeds.rb

对于db / seeds.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

答案 2 :(得分:5)

这可能不适用于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 :(得分:3)

@Stewart你是对的。在用户模型中使用admin标志是可以接受的,并且仍然可以与许多授权选项共存。请查看cancan文档中的Ability类,了解它的外观示例:

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

如果功能确实不同,或者授权要求(例如向authkeys添加子域)不同,则拥有多个授权模型会非常有用。

另一种方法是向用户添加HABTM角色关系。这是Tony Amoyal的一个很好的教程: http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

答案 4 :(得分:0)

尝试将/ sign_in附加到您的管理路径,无论您将其设置为...我的

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

答案 5 :(得分:0)

可以方便地填充表格 - db/seed.rb文件。只需添加用于在其中创建用户的脚本并运行:

rake db:seed

您可以在下面看到包含Useremail字段的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

注意,此处应用设计验证。

Here您可以找到更多使用seed.rb文件的示例,而here是rayn的导演。