gpt4 book ai didi

spring - Grails 检查特定 Controller 操作的角色访问权限

转载 作者:行者123 更新时间:2023-12-04 23:50:08 25 4
gpt4 key购买 nike

我需要根据用户是否可以访问(通过角色定义)特定 Controller /操作来显示/隐藏操作按钮。我正在使用 Spring Security 插件。

我的目标是对每个 Controller 的每个方法使用注释 @Secured("ROLE_..."),我正在寻找一种方法来检查,在调用操作之前,用户是否有权访问此特定操作.我猜有办法检查这一点,因为注释带来了信息,但我找不到任何解决方案。

在这个例子中,我试图找到 HASACCESS 方法:

带有@Secured 注释的 Controller

    class MyExampleController{

@Secured("ROLE_ADMIN")
def myMethod(){ do stuff.. }

}

包含去链接的 HTML 代码
    <role:link controller="myExample" action="myMethod">Action</role:link>

还有我的 tagLib 角色
    class RoleTagLib {
static namespace = "role"

def link = {attrs, body ->
User user = (User) springSecurityService.currentUser
if(HASACCESS(user, attrs.controller, attrs.action)){
out << g.link(attrs, body)
}
}
}

我在 this thread 中找到包含在 SecurityTagLib 中的“hasAccess()”方法但此方法受到保护,即使我使用我的扩展 SecurityTagLib 时,此方法的调用也会返回“无方法签名...”。我认为它使用 Config.groovy 中定义的interceptUrlMap 而不是注释。

编辑:我成功扩展了安全 tagLib 并使用了“hasAccess”方法,但它似乎只使用了 Config.groovy 中包含的interceptUrlMap 并且不关心我放在 Controller 中的注释。

最佳答案


<sec:ifAllGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">
secure stuff here
</sec:ifAllGranted>

或者
<sec:ifAnyGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">
secure stuff here
</sec:ifAnyGranted>

根据 Spring Security Core Grails plugin documentation .

或者简单地将 Spring 安全核心标签库与您的标签库一起使用。
class RoleTagLib {
static namespace = "role"

SpringSecurityService springSecurityService

def link = { attrs, body ->
User user = (User) springSecurityService.currentUser
sec.ifAnyGranted(roles: 'ROLE_ADMIN,ROLE_SUPERVISOR'){
out << g.link(attrs, body)
}
}
}

关于spring - Grails 检查特定 Controller 操作的角色访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24549160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com