我正在构建一个简单的博客式应用程序。我真的只需要管理员和非管理员用户,所以看起来在用户模型中有一个名为admin(boolean)的简单列就足够了。
我现在正在使用Devise进行授权,我已经添加了管理列。我正在尝试在seeds.rb
中设置我的默认管理员用户(我自己),但管理员是false
,除非我将管理列添加到attr_accessible
。但是,这似乎是一个安全问题,我通常不希望管理员用户能够被其他管理员创建。这样做的正确,安全的方法是什么?
答案 0 :(得分:2)
您想要在内部设置admin
布尔值。不要将其暴露给批量分配。
让您的用户模型自动将第一个用户(您)默认为管理员。为此使用before_create
方法......
# models/user.rb
before_create :make_first_user_an_admin
def make_first_user_an_admin
self.admin = self.class.count == 0 # sets true if no users exist, false otherwise
end
然后使用实例方法设置adminship ...
# models/user.rb
def toggle_admin
self.admin = !self.admin
save
end
在你的控制器中保护这个方法......
# controllers/users_controller.rb
def change_adminship
if current_user.admin
@user.toggle_admin
else
raise "Can't do that."
end
end
答案 1 :(得分:0)
将管理员保留为attr_accessible非常正确,这只是禁用通过批量分配设置它。您仍然可以通过单独设置来在种子中设置管理员。例如:
user = User.new(:name => 'joe') ...
user.admin = true
user.save