使用带有Spring Security插件的Grails 2.x的字段级安全性

时间:2014-04-09 20:07:00

标签: grails spring-security

是否可以使用Grails中的Spring Security Core插件实现字段级安全性?

我们目前正在使用@Secured注释的方法级安全性,但有些用户应该只能更新实体的某些字段。我们可以使用security taglib来隐藏不应该访问的字段,但这只是一个客户端限制(因此很容易被规避)。

1 个答案:

答案 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)