我为我的应用推出了基于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
)
知道是否有办法做到这一点?这会让我的生活变得更轻松。
答案 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