我正在尝试获取域对象列表,但仅限于允许用户查看的域列表。这基于用户从spring security获得的角色。
我希望能够在我的控制器中做些什么是
[reportInstanceList: Report.list(params).sort{it.name}]
但只能获取报告
Report.role = SecurityContextHolder.getContext().getAuthentication().getAuthorities()
我在另一个服务类中有Spring安全性的东西,但为了简单起见,它的内联在这里。
有没有办法指导GORM只提取角色匹配的记录?
答案 0 :(得分:2)
类似的东西:
def reports = Report.createCriteria().list( params ) {
'in'( "role", SpringSecurityUtils.principalAuthorities )
}
[ reportInstanceList: reports, totalCount: reports.totalCount ]
应该工作......
答案 1 :(得分:0)
这是dynamic finders的用途。您可以使用findAllBy
finder获取具有属性的所有对象。
Report.findAllByRoleInList(SecurityContextHolder.getContext().getAuthentication().getAuthorities())
您还可以通过传递参数图来对数据库级别进行排序。
Report.findAllByRoleInList(roles, [sort: 'name'])