我有一个定义了static scaffold = true
的控制器,以及一些自定义操作。
我想确保只有登录用户和ADMIN类型(我们域中的某些Enum
值)才能访问它。为了实现这一点,我实现了一个映射到/admin/**
URI空间的grails过滤器,当然还有当脚手架不在那里时有问题的域/控制器的URI。我为show / edit / create操作添加了自定义的,命名的URL映射(直接工作并直接委托给scaffold层),但我最终得到了两个专门用于此目的的URI上下文。
我希望能够对脚手架控制器说“使用此URI作为所有URI的前缀”并完成它,但一般来说搜索文档和网络并没有证明非常有帮助。
有什么想法吗?
答案 0 :(得分:5)
脚手架控制器使用标准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,因此您可以按白名单限制
controller(inList:['foo', 'bar'])
或通过正则表达式
// exclude all controllers whose name starts "sec", e.g. secUser, secRole, ...
controller(matches:/(?!sec).*/)