【发布时间】:2014-08-24 07:25:24
【问题描述】:
我需要根据用户是否可以访问(通过角色定义)特定控制器/操作来显示/隐藏操作按钮。我正在使用 Spring Security 插件。
我的目标是为每个控制器的每个方法使用注释 @Secured("ROLE_..."),我正在寻找一种方法来检查,在调用操作之前,如果用户有权访问这个具体的动作。我猜有办法检查这一点,因为注释带来了信息,但我找不到任何解决方案。
在这个例子中,我试图找到 HASACCESS 方法:
带有@Secured注解的控制器
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,并不关心我放在控制器中的注释。
【问题讨论】:
标签: spring grails spring-security user-permissions user-roles