获取最新的10位注册用户 - Spring security Grails

时间:2016-04-03 09:41:30

标签: grails spring-security gorm grails-plugin grails-2.0

我需要在我的应用程序中获取最后10个注册用户(普通用户)以进行统计。该应用程序有两个角色:普通用户和管理员用户。

在我的User类(Spring安全性)中,我有 dateCreated 字段,我可以使用此查询获取控制器中最后10个注册用户:

User.listOrderByDateCreated(max: 10, order: 'desc')

但我只想在普通用户之间获取它,不包括管理员。通过此查询,我可以获得所有普通用户:

UserRole.findAllByRole(role).user

我要运行什么查询?感谢。

3 个答案:

答案 0 :(得分:2)

试试这个

> User.executeQuery( "from User user where user.id in (select  userRole.user.id from UserRole userRole where userRole.role.id =:roleId) order by dateCreated desc", [roleId: role.id], [max: 10])

其他方式是

UserRole.executeQuery( "select ur.user from UserRole ur where ur.role.id =:roleId) order by ur.user.dateCreated desc", [roleId: role.id], [max: 10])

让我知道它是否适合你...... :)

答案 1 :(得分:1)

试试这个:

User.findAllByRole(role,
                 [max: 10, sort: "dateCreated", order: "desc"])

答案 2 :(得分:1)

令人惊讶的是,这是一个棘手的问题,因为用户没有对角色的直接处理,因此GORM助手没有那么多帮助。使用直接的Groovy列表操作,我们可以得到你想要的。

def users = User.list().findAll { it.authorities.contains role }
.sort { it.dateCreated }
.reverse()
.take(10)

//or…

def users = UserRole.findAllByRole(role).user
.sort { it.dateCreated }
.reverse()
.take(10)

但是,如果您拥有大量用户,这将是获得10个用户的低效方式。更好的选择可能是使用Hibernate标准:

def users =  UserRole.createCriteria().list(max: 2) { 
  eq "role", role
  user { 
    order 'dateCreated', 'desc'
  }
  projections { property 'user' } 
}

或者如果您愿意,可以通过executeQuery()

使用HQL进行查询
def users = User.executeQuery("from User where id in (select user.id from UserRole where role.id = :roleId) order by dateCreated desc", [roleId: role.id], [max: 10])