Grails:OR角色的@Secured注释

时间:2017-01-13 08:34:36

标签: spring grails spring-security grails-3.0

在Grails我正在使用

import grails.plugin.springsecurity.annotation.Secured

@Secured({'ROLE_COMPANY', 'ROLE_BACKEND_ADMIN'})
class MobileSendersController {

但它在角色之间建立了AND关系。我需要OR关系。允许访问ROLE_COMPANYROLE_BACKEND_ADMIN

在此question中,答案建议使用@PreAuthorize。我在Grails中尝试过,但没有运气。也许我需要修改注释前后,但我无法找到配置。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

如果你看一下documentation@Secured,你会看到它使用SpEL表达式(documentation,关于此),所以你可以做很多事情。特别是,您可能希望使用hasAnyRole(),如下所示:

@Secured("hasAnyRole('ROLE_COMPANY', 'ROLE_BACKEND_ADMIN')")

答案 1 :(得分:5)

这可以解决问题 -

import grails.plugin.springsecurity.annotation.Secured

@Secured(['ROLE_COMPANY', 'ROLE_BACKEND_ADMIN'])
class MobileSendersController {

请参阅文档http://grails-plugins.github.io/grails-spring-security-core/v3/index.html#securedAnnotations

答案 2 :(得分:0)

为什么一个控制器有两个角色?也许考虑为您的控制器设置一个权限,然后您可以将权限添加到您的ROLE_COMPANY和ROLE_BACKEND_ADMIN角色。