我们的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
似乎在这里运作不佳。如何保护这些领域?非常感谢。
答案 0 :(得分:1)
如果您未在同一个呼叫中更改密码和其他易受攻击的字段,则无需将其设置为attr_accessible。所以,这应该有效:
user.user_positions.first.position = "some update"
user.save
如果您在验证时保存失败,那么就是保存操作的问题,由于某种原因,更新了密码。因此,如果它仍然存在,请将其粘贴到此处。
答案 1 :(得分:0)
我们所做的是添加相同的安全角色:admin和user_position模型中的attr_accessible。此更改允许我们创建和更新用户信息。它是否提供防止不必要的质量分配的安全性?看来确实如此。但是我们没有测试和验证它。