2

我已经为我的应用推出了基于 Hartl 的自己的身份验证/授权系统。我想允许管理员让其他用户成为管理员,所以我在我的 user.rb 文件中做了这个:

attr_accessible :name, :email, :password, :password_confirmation, :order_id
attr_accessible :name, :email, :password, :password_confirmation, :order_id, :admin, :as => :administrator

并将其放入我的用户更新操作中:

def update
   if current_user.admin?
      if @user.update_attributes(params[:user], :as => :administrator)

这对我来说非常有用,但是必须进入控制台并输入变得很烦人

User.find(2).toggle!(:admin)

或者无论如何,每当我想在数据库重置后成为我的第一个管理员用户时,或者就此而言,必须使用控制台或个人编辑来创建其他管理员。如果我可以播种“:as => administrator”,我会很高兴,所以我在我的seed.rb文件中尝试了这个,但它不起作用(质量分配错误):

    admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password",
    :admin => true,
    :as => :administrator
)

知道是否有办法做到这一点?这会让我的生活轻松很多。

4

3 回答 3

2

我找到的最简单的解决方案是在创建用户后立即在种子.rb 文件中切换 admin。这样,我避免了“大量”分配,而不必在控制台中分配。所以:

admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password"
)
admin.toggle!(:admin)
# I assume "admin.update_attribute(:admin, true)" would work as well.
于 2012-11-12T20:54:39.917 回答
0

由于您有质量分配错误,我认为您应该只保留 attr_accessibleUser.rb 中的第二行并丢弃导致错误的第一行。

于 2012-10-24T02:18:09.827 回答
0

我一直在寻找执行相同的操作并最终在seeds.rb 中这样做:

# db/seeds.rb
users = User.create({email: 'email@admin.com', username: 'admin', password: 'sEcReT', password_confirmation: 'sEcReT', role: 'admin'},
                    :as => :admin)

# models/user.rb
attr_accessible :email, :username, :password, :password_confirmation, :role, :as => :admin
于 2013-03-03T22:25:29.777 回答