我计划在一个用 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()]
}