44

好的,当有人用我错过的简单事情回答这个问题时,我可能会感到很愚蠢,但是......这里是:

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

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

4

6 回答 6

93

是的。我觉得很笨。

如果其他人也有同样乏味的时刻。只需使用 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

这样就可以了。现在只需访问您的管理员登录路径并登录。

于 2010-05-02T08:15:44.363 回答
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
于 2012-06-08T09:27:02.627 回答
5

这可能不适用于设计(但我相信它会),但一般来说,如果您想为管理员用户播种但不想将管理员密码存储在源代码管理中,您可以执行以下操作...

@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

您可以使用要查找密码摘要的密码在本地创建用户。

于 2011-09-12T22:38:13.230 回答
3

@斯图尔特你是对的。在用户模型中使用管理标志是可以接受的,并且仍然可以与许多授权选项共存。查看 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/

于 2010-11-08T22:17:58.890 回答
0

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

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

于 2010-04-26T17:47:42.607 回答
0

有一种方便的方式来填充表 - db/seed.rb文件。只需在其中添加用于创建用户的脚本并运行:

rake db:seed

下面您可以看到带有和字段的User模型示例:emailusername

# 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文件的示例,这里是 rayn's rails cast。

于 2014-07-03T21:20:12.140 回答