查找具有特定 spring 安全角色的用户

Posted

技术标签:

【中文标题】查找具有特定 spring 安全角色的用户【英文标题】:Find user with specific spring security role 【发布时间】:2012-10-26 08:06:56 【问题描述】:

我有以下几点:

def userInstance=User.findAll("from User u where u.merchant is not null and u.merchant.id = ? and u.authorities.authority.contains('ROLE_MERCHANT')", merchantId)

并得到以下错误:

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 121 [from com.testing.tests.User u where u.merchant is not null and u.merchant.id = ? and u.authorities.authority.contains('ROLE_MERCHANT')]
    at $Proxy20.createQuery(Unknown Source)
    at testing.admin.UserService.findByMerchantId(UserService.groovy:14)

如何只返回具有特定角色的用户?

谢谢

【问题讨论】:

【参考方案1】:

如果您查看User#getAuthorities 的默认实现,您会注意到该属性本身是通过动态查找器调用实现的:

UserRole.findAllByUser(this).collect  it.role  as Set

因此在HSQL查询中不能引用authorities,但是可以通过UserRole关联域类通过多种方式查询具有特定角色的用户:

def users = UserRole.withCriteria 
   role
       eq 'authority', 'ROLE_SOMETHING'
   
   projections
      property 'user'
   

def users = UserRole.findAllByRole(domainRole)?.user

【讨论】:

我正在尝试 withCriteria 版本,但由于 select this_.user_id as y0_ from user_role this_ where (role_alias1_.authority=?) 而出现 SQLGrammarException。我认为 role_alias1_ 应该是 this_ (或反之亦然),但无法弄清楚为什么它会像这样生成。任何指针? 这对我几分钟前遇到的问题非常有帮助,我可以按照逻辑进行操作,但我不需要使用角色 ... 来查询关联

以上是关于查找具有特定 spring 安全角色的用户的主要内容,如果未能解决你的问题,请参考以下文章

查找具有特定角色的用户

使用 rolify 查找具有特定角色的所有用户

具有特定表角色的spring security UserDetailsS​​ervice

查找存在特定用户及其角色的所有数据库

Laravel Eloquent - 返回具有特定角色的用户(多对多关系)

拒绝策略不适用于具有特定角色的认知用户