使用grails ACL将ROLE动态分配给控制器操作

时间:2013-09-01 08:55:23

标签: grails

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

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

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

我试过

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

但得到错误:
属性'value'应该有'java.lang.String'类型;但在@ grails.plugins.springsecurity.Secured中找到了'java.lang.Object'类型  @ line -1,第-1列。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

您可以在行动中使用弹簧安全设施,而不是使用注释:

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)
}