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

Pet*_*yen 3 grails spring-security

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

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

Jos*_*ore 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']]) 
    }
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

从理论上讲,您甚至可以在您选择的绑定方法中将此绑定逻辑封装在域类本身中(例如personInstance.bindDataWithSecurity(params))