Grails这个非常强大的功能
def save(MyDomain model) {
model.save()
render ''
}
将解析请求正文或参数,运行MyDomain.get(id)
,填写请求正文中的属性或参数并保存。对于这一小段代码来说,这是很多。
如何限制绑定到model
的属性?假设我有accountBalance
属性是只读的,我不希望恶意用户能够更改其帐户余额。
此外,我希望有多个操作可以保存MyDomain
的不同属性子集......例如,一个操作可能是为帐户持有人存款的银行出纳员用户。在这种情况下,出纳员应该能够设置accountBalance
但不能设置password
。
我意识到实际的银行应用程序不会像这样工作,这只是一个例子。
我还有其他问题导致我使用命令对象绑定数据(参见Grails fails to parse request when content type is specified during post)。任何解决方案也必须解决该帖子。我想如果解决方案使用命令对象然后它会工作,但如果命令对象不在解决方案中,那么必须解决请求体问题。
答案 0 :(得分:2)
没有尝试过实际的域类,但是你可以尝试使用bindData
而不是隐式绑定,你可以特别指定要排除的属性吗?
def save() {
//params - A Map of source parameters
//It can be params or any other representation of request body
//request.JSON, request.XML
MyDomain model = MyDomain.get(params.id?.toLong())
bindData(model, params, [exclude: ['accountBalance']])
model.save()
render ''
}
答案 1 :(得分:0)
我建议你看一下关于绑定的documentation。有很多信息,特别是关于安全性的部分,与您的关注点类似。查看事实bindData()允许您包含/排除属性,您应该能够编写所需的任何绑定变体。