1

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

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 @ line -1,column -1 中找到类型“java.lang.Object”。

任何帮助将不胜感激。

4

1 回答 1

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)
}
于 2013-09-01T09:16:40.513 回答