如何动态构建映射列表 - 而不是:
class UrlMappings {
static mappings = {
"/helpdesk/user/$action?/$id?" (controller="helpdeskuser")
"/helpdesk/group/$action?/$id?" (controller="helpdeskgroup")
"/helpdesk/company/$action?/$id?" (controller="helpdeskcompany")
"/helpdesk/account/$action?/$id?" (controller="helpdeskaccount")
"/admin/company/$action?/$id?" (controller="admincompany")
"/admin/account/$action?/$id?" (controller="adminaccount")
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的伪代码:
class UrlMappings {
static mappings = {
application.controllerClasses.each {
if(it.name.startsWith('helpdesk'))
"/helpdesk/${it.name}/$action?/$id?" (controller="${it.name}")
if(it.name.startsWith('admin'))
"/admin/${it.name}/$action?/$id?" (controller="${it.name}")
}
}
}
Run Code Online (Sandbox Code Playgroud)
(我不明白静态映射是什么 - 哈希映射?自由变量?)
我想要实现的是基于控制器类型的映射 - 例如帮助台,管理员或用户控制器.一旦我设置了映射,我想基于URL添加安全性,但我不想单独映射每个控制器:
grails.plugins.springsecurity.interceptUrlMap = [
'/helpdesk/**': ['ROLE_HELPDESK','ROLE_ADMIN'],
]
Run Code Online (Sandbox Code Playgroud)
Gar*_*vis 11
我刚刚在我的应用程序中完成了以下操作:
import org.codehaus.groovy.grails.commons.ApplicationHolder
class UrlMappings {
static mappings = {
for( controllerClass in ApplicationHolder.application.controllerClasses) {
// Admin Controllers first
if( controllerClass.name.startsWith("Admin")){
// note... fixes the case so that AdminUserController maps to /admin/user
"/admin/${controllerClass.name[5].toLowerCase() + controllerClass.name[6..-1]}/$action?/$id?" {
controller = "admin${controllerClass.name[5..-1]}".toString()
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我之前没有真正做到这一点,你的问题促使我解决这个问题.这是我一直尝试做的事情之一.
grailsUrlMappingsHolder bean在服务和控制器中可用.虽然UrlMappingsHolder的具体实现没有add方法,但是它的超类确实如此.这简单如grails 2.3.4
def grailsUrlMappingsHolder
def addMapping() {
grailsUrlMappingsHolder.addMappings({
"/admin"(controller:"admin" action:"index")
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10099 次 |
| 最近记录: |