在我的Grails项目中,我使用Spring Security插件定义了多个hierarchical roles,例如ROLE_USER > SOME_OTHER_ROLE
。使用@Secured
注释保护控制器方法时,它可以正常工作。但是,我还想在一个用例的代码中以编程方式检查角色。使用以下方法,即使用户通过层次结构角色定义继承角色,我总是得到false
:
request.isUserInRole('SOME_OTHER_ROLE')
以下调用永远不会直接返回继承的角色:
SecurityContextHolder.context?.authentication?.authorities
springSecurityService.getPrincipal().getAuthorities()
有没有办法检查用户是否也有继承角色?
答案 0 :(得分:2)
这似乎是SecurityContextHolderAwareRequestWrapper
中的一个错误(或至少是一个遗漏),它添加了一个请求包装器来实现isUserInRole
方法。
您可以使用roleVoter
bean的extractAuthorities
方法。为其添加依赖注入(def roleVoter
),然后调用
def allRoles = roleVoter.extractAuthorities(
SecurityContextHolder.context.authentication)