这是代码:
class M
include Mongoid::Document
field :name
end
params = { name: "foo", age: 20 }
M.create(params)
#=> #<M name: "My Name", age: 20>
请注意,age
它没有被定义,但它被保存了。
这是有问题的(可能是 DoS 的来源),因为恶意用户可以在 POST 中添加任何参数,并且带有大字符串的未知字段可以潜入。(例如name=foo&bogus=#{'x'*1000000}
)
到目前为止,除了 之外,我什么也找不到attr_accessible
,但这对 Mongoid 来说并不是很好,因为您必须在所有模型中field
始终保持相同的字段名称。attr_accessible
不干燥。
我认为attr_accessible
API 非常适合 ActiveRecord,因为有一个。您没有在模型(DRY)和b 中明确定义字段。保证不会将不存在的字段保存到 RDB。但是对于 Mongoid,我认为应该有比attr_accessible
.
请注意,有一个全局配置设置allow_dynamic_fields
,但它与批量分配无关,因此超出了本次讨论的范围,但我认为它实际上应该是每个模型的宏,并且还应该处理批量分配。
你是如何处理这个问题的?