gpt4 book ai didi

grails - 从过滤器访问 Controller 方法所需的角色/权限

转载 作者:行者123 更新时间:2023-12-02 15:25:29 24 4
gpt4 key购买 nike

是否可以在 Grails 过滤器中检索特定 Controller 操作/方法所需的角色/权限列表?

假设安装了 Spring Security Core (2.0.x) 插件和一个使用 @Secured 注释的 Controller ,例如:

class PersonController {

@Secured(['ROLE_MANAGER','ROLE_USER'])
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond Person.list(params), model:[personInstanceCount: Person.count()]
}

@Secured(['ROLE_MANAGER'])
def show(Person personInstance) {
respond personInstance
}
}

如果用户导航到索引操作,过滤器将获得 ['ROLE_MANAGER', 'ROLE_USER'],如果他们导航到显示,过滤器将获得 ['ROLE_MANAGER']。我尝试注入(inject) objectDefinitionSource进入过滤器并使用 objectDefinitionSource.allConfigAttributes如下所示:
class MyFilters {

def objectDefinitionSource

def filters = {
all(controller:'assets', action:'*', invert: true) {
before = {
// get list of spring security roles required for the controller's action
objectDefinitionSource.allConfigAttributes.each { println it }
// additional filter behavior...
}
}
}
}

但正如该方法所建议的那样,它显示了应用程序中定义的所有角色,而不仅仅是特定于该操作的角色。

最佳答案

试试这个代码

def ctrlClass = grailsApplication.getArtefactByLogicalPropertyName("Controller", controllerName).clazz
def roles = ctrlClass.getDeclaredMethod(actionName).getAnnotation(grails.plugin.springsecurity.annotation.Secured).value()

它应该为您的“索引”操作返回 ['ROLE_MANAGER','ROLE_USER'] 并为您的“显示”操作返回 ['ROLE_MANAGER']

关于grails - 从过滤器访问 Controller 方法所需的角色/权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28439166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com