0

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

我希望能够在我的控制器中做的事情类似于

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

但只在哪里得到报告

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

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

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

4

2 回答 2

2

就像是:

def reports = Report.createCriteria().list( params ) {
    'in'( "role", SpringSecurityUtils.principalAuthorities )
}
[ reportInstanceList: reports, totalCount: reports.totalCount ]

应该管用...

于 2013-08-07T16:00:49.577 回答
0

这就是动态查找器的用途。您可以使用findAllBy查找器获取具有属性的所有对象。

Report.findAllByRoleInList(SecurityContextHolder.getContext().getAuthentication().getAuthorities())

您还可以通过传递参数映射在数据库级别进行排序。

Report.findAllByRoleInList(roles, [sort: 'name'])
于 2013-08-07T15:58:42.350 回答