GORM按属性获取域对象列表

时间:2013-08-07 15:54:50

标签: grails gorm grails-2.0

我正在尝试获取域对象列表,但仅限于允许用户查看的域列表。这基于用户从spring security获得的角色。

我希望能够在我的控制器中做些什么是

[reportInstanceList: Report.list(params).sort{it.name}]

但只能获取报告

Report.role = SecurityContextHolder.getContext().getAuthentication().getAuthorities()

我在另一个服务类中有Spring安全性的东西,但为了简单起见,它的内联在这里。

有没有办法指导GORM只提取角色匹配的记录?

2 个答案:

答案 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'])