【问题标题】:How to customize rolePrefix in Grails using Spring Security plugin?如何使用 Spring Security 插件在 Grails 中自定义 rolePrefix?
【发布时间】:2015-03-11 22:42:05
【问题描述】:

我正在处理grails 2.3.8 项目并尝试自定义Role Hierarchy。我正在尝试用rolePrefix = 'PERM_' 更改resources.groovyrolePrefix = 'ROLE_' 的默认值。我知道要完成这项工作,我需要在我的 Config.groovy 中进行以下更改,如下所示:

grails.plugins.springsecurity.userLookup.userDomainClassName = 'tpo.core.acl.AdminAccount'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'tpo.core.acl.AdminAccountPermission'
grails.plugins.springsecurity.authority.className = 'tpo.core.acl.Permission'

为了建立层次结构,我也需要在我的 Config.groovy 中添加它

grails.plugins.springsecurity.roleHierarchy = ''' 
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_CREATE
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_READ
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_UPDATE
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_DELETE
'''

所以在我的控制器中,它类似于,

@Secured(['PERM_ACCOUNT_ALL'])
    def index() {
        redirect(action: "list", params: params)
    }

当我尝试运行我的应用程序并访问我的控制器的index() 操作时,我被提示登录,这是由于@Secured() 的存在而预期的,但成功登录后,我还没有能够访问index() 操作,它显示,对不起,您无权查看此页面。该权限已分配给我曾经登录的用户,但我仍然无法访问它。

我错过了什么?

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    还有很多其他的东西:)

    插件不允许此更改的原因是为了支持标准选民。目前,可以使用三种样式的字符串来指定访问规则 - 角色名称、SPeL 表达式和时髦的“IS_AUTHENTICATED”字符串 - IS_AUTHENTICATED_ANONYMOUSLYIS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED。此外,为 2.0 版本添加了一种新方法 - 使用闭包和其中的任意 Groovy 代码,但这与角色名称无关。

    查询每个注册选民以确定他们是否“支持”(即可以投票)这些令牌中的每一个。目前的逻辑相当简单——“IS_AUTHENTICATED_...”字符串由一个投票者处理,以“ROLE_”开头的字符串由另一个投票者处理,其他所有内容都假定为 SPeL 表达式。

    说实话,我认为既然角色必须在启动时“注册”(以指定注释中每个角色允许的访问规则,Config.groovy 等),角色投票者可以做更多不仅仅是检查字符串是否以某个前缀开头 - 它可以查看其已知角色名称的集合。因此,为 2.0 版本添加对自定义角色前缀的支持可能不会有太多工作,我将对此进行研究。但就目前而言,除了这个例外,该插件在所有方面都尽可能地可定制。

    【讨论】:

    • 非常感谢您的回复。我们之前可以在 grails 2.0.4 中自定义角色前缀,但是现在,在进行相同的自定义之后,我不能再使用 grails 2.3.8 应用它,即使使用相同的 spring security core 版本 1.2.7.3。我迷路了o_o
    猜你喜欢
    • 2015-12-13
    • 2016-11-25
    • 2012-06-22
    • 1970-01-01
    • 2011-03-24
    • 2018-12-14
    • 2017-09-19
    • 2014-10-06
    • 2018-11-04
    相关资源
    最近更新 更多