Grails Spring Security ACL域对象方法安全



我的问题是:是否有可能保护域对象方法,甚至动态方法,如findByName?

它在服务方法上工作得很好,但我不能让它在域实例方法或域静态方法上工作。

class Dummy {
    string name
    @PostFilter("hasPermission(filterObject, read)")
    static List<Dummy> listDummies(){
        Dummy.list();
    }
}

当从控制器调用listDummies时,即使没有用户连接,也会返回所有的dummies。

我怎么做才能使它工作?

事先感谢您提供的帮助

不,这不可能。注释通过触发在所调用的类实例周围创建代理来工作。这对于Grails服务来说是最方便的,因为它们会自动注册为Spring bean,因此注释会被检测到并被代理。您在代理上进行方法调用,它执行ACL检查,并且只在允许访问时调用真正的方法。

但是对于静态方法、动态Groovy方法或未注册为Spring bean的类中的方法,这种代理不会发生。对于本例,创建一个带注释的服务方法。您仍然可以将所有代码留在域类中,甚至可以使用动态查找器,但重要的是访问是通过代理服务完成的。一旦检查发生,您就可以在任何您想要的地方实现逻辑。

相关内容

  • 没有找到相关文章

最新更新