Rails seed.rb作为管理员

时间:2012-10-24 01:57:02

标签: ruby-on-rails ruby-on-rails-3 authorization seed

我为我的应用推出了基于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
)

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

3 个答案:

答案 0 :(得分:2)

我找到的最简单的解决方案是在创建用户后立即在seeds.rb文件中切换管理员。这样,我就可以避免“大规模”分配,而无需在控制台中进行分配。所以:

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.

答案 1 :(得分:0)

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

答案 2 :(得分: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