【发布时间】:2014-05-23 06:26:16
【问题描述】:
是否可以使用 Grails 中的 Spring Security Core 插件实现字段级安全性?
我们目前正在使用带有@Secured 注释的方法级安全性,但是有些用户应该只能更新实体的某些字段。我们可以使用security taglib 隐藏不应访问的字段,但这只是客户端限制(因此很容易绕过)。
【问题讨论】:
是否可以使用 Grails 中的 Spring Security Core 插件实现字段级安全性?
我们目前正在使用带有@Secured 注释的方法级安全性,但是有些用户应该只能更新实体的某些字段。我们可以使用security taglib 隐藏不应访问的字段,但这只是客户端限制(因此很容易绕过)。
【问题讨论】:
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))
【讨论】: