我可以为控制器操作中的不同角色授予权限,如下所示:
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列。
任何帮助将不胜感激。
答案 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)
}