否定attr_accessible的“正确方法”

时间:2012-07-03 01:26:44

标签: ruby-on-rails security

我的模型包含'admin'字段,该字段为true或false。它不是'attr_accessible',因为我们不希望坏人能够欺骗我们的控制器为用户提供'admin'权限。

因为,如果我在我的模型中以管理员身份登录,我'确实'希望能够更新任何用户的记录来制作或从中删除管理员。所以......管理员缺乏attr_accessible使我无法这样做。

也许这不是看待它的正确方法。处理这种情况的正确方法是什么?谢谢!

1 个答案:

答案 0 :(得分:4)

Rails 3.2添加了一项功能,可以让您完成您所描述的内容。只需在您的模型中定义:

attr_accessible accessible_attributes + [:admin], :as => :admin

然后在要分配admin属性的控制器中,执行以下操作:

User.new(params[:user], :as => :admin)

user.update_attributes(params[:user], :as => :admin)

使用attr_accessible进行:as => :admin调用之前列出的所有属性都将是支持:as => :admin选项的任何Active Record调用的可访问属性。

如果您没有在该定义中调用accessible_attributes,那么只有那里定义的属性才可以访问。