【问题标题】:Assign ROLE dynamically to a controller action using grails ACL使用 grails ACL 将 ROLE 动态分配给控制器操作
【发布时间】:2013-09-01 17:16:40
【问题描述】:

我可以在控制器操作中授予不同角色的权限,如下所示:

class ThingController {
    @Secured(['ROLE_ADMIN', 'ROLE_SALES', 'ROLE_OTHERS'])
    create() {
      // creation logic
    }
}

这意味着,具有上述角色的用户可以访问“创建”操作。好吧,没关系。但是这里的角色被定义为硬编码。但是,如果想动态添加更多角色或从“创建”操作中删除其中一个角色,我该怎么做?

我试过了

String roles='ROLE_ADMIN'
@Secured(["'"+roles.toString()+"'"])

但出现错误:
属性“值”应具有类型“java.lang.String”;但在@grails.plugins.springsecurity.Secured 中找到了“java.lang.Object”类型 @ 第 -1 行,第 -1 列。

任何帮助将不胜感激。

【问题讨论】:

    标签: grails


    【解决方案1】:

    注解由编译器评估,不能包含任何代码。它的参数必须是常量表达式。

    您可以在操作中使用 spring 安全工具,而不是使用注释:

    import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
    import javax.servlet.http.HttpServletResponse
    
    if (SpringSecurityUtils.ifAllGranted("ROLE1,ROLE2,ROLE3")) {
         // perform action
    } else {
         response.sendError(HttpServletResponse.SC_FORBIDDEN)
    }
    

    【讨论】:

    • 我试过但显示错误:无法在空对象上调用方法 ifAllGranted()
    • 那你忘了导入。 SpringSecurityUtils 是一个类。
    • 不,我在上面包含了导入语句:import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils。我应该为此添加任何插件吗?我已经在我的应用程序中添加了 spring-security-core-1.2.7.3 和 spring-security-acl-1.1.1 插件。
    • 该类在 spring-security-core 中。
    • 显示同样的错误。我添加了所有依赖项。 SpringSecurityUtils.java 类也存在于指定路径中。
    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 2014-04-04
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2011-08-30
    相关资源
    最近更新 更多