是否可以使用Grails中的Spring Security Core插件实现字段级安全性?
我们目前正在使用@Secured注释的方法级安全性,但有些用户应该只能更新实体的某些字段。我们可以使用security taglib来隐藏不应该访问的字段,但这只是一个客户端限制(因此很容易被规避)。
答案 0 :(得分:6)
Grails的Spring Security Core插件直接对此没有任何支持。但是,没有什么能阻止你在绑定中编写自己的安全性。
例如,在您的控制器中:
package com.example
import grails.plugin.springsecurity.SpringSecurityUtils
class PersonController {
...
def update() {
Person personInstance = Person.get(params.id)
if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN') {
bindData(personInstance, params) // exclude nothing
} else {
bindData(personInstance, params, [exclude: ['someSensitiveProperty', 'anotherProp']])
}
}
...
}
理论上,您甚至可以在您选择的绑定方法中将此绑定逻辑封装在域类本身中(例如personInstance.bindDataWithSecurity(params)
)