防止某些属性更新?

时间:2010-10-06 02:39:07

标签: ruby-on-rails security

在rails中,更新模型时,如何在使用以下调用时阻止更新模型的某些属性:

@user.update_profile params[:user]

由于任何人都可以使用“密码”这样的名称创建表单输入,您如何过滤允许更新的属性集?

这是attr_XXX的用途吗?

2 个答案:

答案 0 :(得分:6)

您正在寻找attr_accessible。它允许您指定可以通过批量更新设置哪些属性(如update_attributes),但您仍然可以“手动”设置属性(即@user.attribute = ...)。

有关详细信息,请参阅The importance of attr_accessible in Ruby on Rails

答案 1 :(得分:4)

您正在寻找attr_protected为黑名单的任何您不希望在批量更新中更改的属性。 将它扔在你的模型中,并将一个属性符号列表提供给黑名单。

class User < ActiveRecord::Base
  attr_protected :password
end 

或者,您可以使用attr_accessible采用白名单方法,并且只有在一次更新整个记录时才能更新给定的属性。每个其他属性都将受到保护。

N.B 如果受保护的属性直接分配给

,则仍然可以覆盖它们
@user.password = "not secure"