我有一个定义了 staticscaffold = true
的 Controller ,以及一些自定义操作。
我想确保只有登录用户和 ADMIN 类型的用户(我们域中的某些 Enum
值)才能访问它。为了实现这一点,我实现了一个 grails 过滤器,该过滤器映射到 /admin/**
URI 空间,但当然,当脚手架不在此处时,相关域/ Controller 的 URI 也不会被映射到该空间。我为显示/编辑/创建操作添加了自定义、命名的 URL 映射(这些操作直接工作并委托(delegate)给脚手架层),但最终我得到了两个专用于此目的的 URI 上下文。
我更希望能够对脚手架 Controller 说“使用此 URI 作为所有 URI 的前缀”并完成它,但搜索文档和网络通常并没有被证明很有帮助。
有什么想法吗?
最佳答案
支架 Controller 使用标准 taglib 调用生成所有 URL,这对 URL 映射敏感。因此,如果您的 URL 映射正确,那么它应该可以正常工作。如果您想将 MyDomainController
映射到 /admin
下,那么您需要类似
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?" {
constraints {
controller(validator:{
// make sure this mapping doesn't apply to the MyDomainController,
// so it will only be accessible via the protected /admin URL
return it != "myDomain"
})
}
}
// special rule for the MyDomainController
"/admin/myDomain/$action?/$id?"(controller:"myDomain")
}
}
您可以使用any of the usual Grails constraint types在 URL 映射上,因此您可以通过白名单进行限制
controller(inList:['foo', 'bar'])
或者通过正则表达式
// exclude all controllers whose name starts "sec", e.g. secUser, secRole, ...
controller(matches:/(?!sec).*/)
关于grails - 完全覆盖或使用前缀覆盖 Grails 脚手架 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337471/