Grails:OR 角色的@Secured 注释
Posted
技术标签:
【中文标题】Grails:OR 角色的@Secured 注释【英文标题】:Grails: @Secured annotation for OR roles 【发布时间】:2017-05-28 13:47:14 【问题描述】:在我正在使用的 Grails 中
import grails.plugin.springsecurity.annotation.Secured
@Secured('ROLE_COMPANY', 'ROLE_BACKEND_ADMIN')
class MobileSendersController
但它在角色之间建立了 AND 关系。我需要一个 OR 关系。允许访问ROLE_COMPANY
或ROLE_BACKEND_ADMIN
。
在这个question 中,答案建议使用@PreAuthorize
。我在 Grails 中尝试过,但没有运气。也许我需要修改前注和后注,但我找不到配置。
有什么想法吗?
【问题讨论】:
***.com/questions/34182034/… 将提供有关如何让角色组发挥作用的线索。 【参考方案1】:如果你看一下documentation 前面的@Secured
,你会发现它使用了SpEL 表达式(documentation,关于这个),所以你可以做很多事情。特别是,您可能希望像这样使用hasAnyRole()
:
@Secured("hasAnyRole('ROLE_COMPANY', 'ROLE_BACKEND_ADMIN')")
【讨论】:
乔希,我已经改变了接受的答案,因为@Ankit Agrawal 的答案是更多的 Grails。 @zatziky,好吧,不知道是什么让他的回答比我的更像 Grails。它们都使用相同的插件和相同的注释。不过你的选择。 乔希,你可能是对的。我觉得它更好,因为它更短。这是有争议的,因为对于新手来说,hasAnyRole
更全面。所以你们都同意接受的答案。
@zatziky 完全不用担心,很高兴您解决了问题!
哈哈@JoshuaMoore 我第一天就更喜欢你的回答,所以给了你一个高分:)我和你在一起【参考方案2】:
这样就可以解决问题了——
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
【讨论】:
【参考方案3】:为什么一个控制器有两个角色?也许考虑为您的控制器设置一个权限,然后您可以将该权限添加到您的 ROLE_COMPANY 和 ROLE_BACKEND_ADMIN 角色。
【讨论】:
有趣的想法。但。假设您有角色 A、B、C 和控制器 C1、C2、C3。 A 和 B 可以访问 C1。B、C 可以访问 C2。A 只能访问 C3。使用您的方法,每个控制器都需要特殊许可。 OR 的方式更细化。以上是关于Grails:OR 角色的@Secured 注释的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 的 @Secured 注释中是不是允许多个角色