我打算在用Groovy / Grails编写的网站上创建一个客户私人区域,每个客户都可以登录并查看自己的数据,编辑它等等。
回顾Grails提供的可用机制,我看到其中两个看起来很合适:1)过滤器 2) spring-security-acl < / p>
我已经完成了acl教程,我发现acl插件很精细。我不确定我是否真的需要高度的能够授予权利。最后,我需要的是限制每个用户只看到/编辑他自己的数据,这些数据分布在大约20个表(所有规范化,其中一些使用复合键,所有这些都由域类表示)。据我所知,我对过滤器会很好。我看到了吗?网上有这方面的例子吗? (我的意思是,由过滤器保护的应用程序)。
据我所知阅读文档,我应该以任何方式使用服务,不仅仅是控制器,以便能够精细控制正在发生的事情,无论是用户1)还是2)。还对吗?
TIA&amp;感谢您对这些初学者问题的耐心
迈克尔
编辑:我修改了Contract Controller中的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()]
}