如何保护has_many关联模型的质量分配?

时间:2012-07-14 07:32:45

标签: ruby-on-rails ruby-on-rails-3.1

我们的rails 3.1.4 app中有user和user_position。用户具有许多user_positions,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似乎在这里运作不佳。如何保护这些领域?非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您未在同一个呼叫中更改密码和其他易受攻击的字段,则无需将其设置为attr_accessible。所以,这应该有效:

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

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

答案 1 :(得分:0)

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