Grails:OR 角色的@Secured 注释

Grails: @Secured annotation for OR roles

我正在使用 Grails

import grails.plugin.springsecurity.annotation.Secured

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

但它是角色之间的 AND 关系。我需要一个或关系。允许访问 ROLE_COMPANYROLE_BACKEND_ADMIN

在此中,答案建议使用@PreAuthorize。我在 Grails 中尝试过,但没有成功。也许我需要修改预注释和 post-注释,但我找不到配置。

有什么想法吗?

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

如果你看一下 documentation fore @Secured you'll see that it uses SpEL expressions (documentation,关于这个),那么你可以做很多事情。特别是,您可能希望像这样使用 hasAnyRole()

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

这将解决问题 -

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