0

我们的 rails 3.1.4 应用程序中有 user 和 user_position 。一个用户有很多 user_position,一个 user_position 属于一个用户。在用户模型中:

accepts_nested_attributes_for :user_positions, :allow_destroy => true
validates_presence_of :user_positions

保存用户时,也会自动保存 user_positions。为了自动保存 user_positions,user 和 user_positions 中的大多数字段必须声明为attr_accessible. 这是attr_accessible用户模型:

attr_accessible :name, :login, :password_confirmation, :password, :user_positions_attributes

这是 user_position 模型中的内容:

  belongs_to :user 
  attr_accessible :position  
  validates :position, :presence => true

如您所见,这里的所有字段都可以批量分配。:as => :admin似乎在这里工作得不好。如何保护这些领域?非常感谢。

4

2 回答 2

1

如果您不在同一个调用中更改密码和其他易受攻击的字段,则无需将它们设置为 attr_accessible。所以,这应该工作:

user.user_positions.first.position = "some update"
user.save

如果您在验证时保存失败,那么这是保存操作的问题,由于某种原因会更新密码。因此,如果它仍然存在,请将其粘贴到此处。

于 2012-07-16T07:24:24.100 回答
0

我们所做的是在 user 和 user_position 模型中添加相同的安全角色 :admin 到 attr_accessible。该更改允许我们创建和更新用户信息。它是否提供了防止不必要的批量分配的安全性?似乎确实如此。但是我们没有测试和验证它。

于 2012-07-16T16:29:53.870 回答