1

我计划在一个用 Groovy/Grails 编写的网站上创建一个客户私人区域,每个客户都可以在其中登录并查看自己的数据、编辑它等等。

回顾 Grails 提供的可用机制,我发现其中两个似乎很合适:1)过滤器2)spring-security-acl

我已经完成了 acl 教程,我发现 acl 插件非常精细。我不确定我是否真的需要能够授予权利的高度。最后,我所需要的只是限制每个用户只能查看/编辑他自己的数据,这些数据分布在大约 20 个表中(全部标准化,其中一些带有复合键,所有这些都由域类表示)。据我所知,过滤器我会很好。我看对了吗?网上有这方面的例子吗?(我的意思是,一个由过滤器保护的应用程序)。

据我了解阅读文档,我应该以任何方式使用服务,而不仅仅是使用控制器,以便能够精细控制正在发生的事情,无论我是用户 1) 还是 2)。也对吗?

TIA 并感谢您对这些初学者问题的耐心等待

迈克尔

编辑:我修改了合同控制器中的 list() 方法并添加了一个标准,询问您对此的看法。我认为它几乎可以完成这项工作。当然,我还必须处理所有其他方法,例如 create()、save() 等,并在那里添加该标准。否则我将能够编辑任何合同。(用户类有对客户端类的引用。)

def list(Integer max) {

    def user = springSecurityService.getCurrentUser()
    params.max = Math.min(max ?: 10, 100)
    def c = Contract.createCriteria()
    def isAdmin = org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')
    def results = c.list (params) {
        if (!isAdmin) {
            eq("client", user.client)
        }
    }
    [contractInstanceList: results, contractInstanceTotal: results.getTotalCount()]
}
4

0 回答 0