小编Dav*_*idC的帖子

动态Grails Url映射配置

如何动态构建映射列表 - 而不是:

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)

grails groovy

11
推荐指数
2
解决办法
1万
查看次数

Rails ActiveRecord:如何在 jsonb 上使用带双引号的绑定变量

我有一个 postgres jsonb 查询,如下所示:

Blog.where("upload_data @> '[ { \"name\": \"#{name}\" }]'")
Run Code Online (Sandbox Code Playgroud)

哪个有效但破坏了构建,因为优秀的刹车员指出了可能的 sql 注入风险。如果我使用绑定变量:

Blog.where("upload_data @> '[ { \"name\": ? }]'", name)
Run Code Online (Sandbox Code Playgroud)

它创建一个 sql 查询,如:

WHERE upload_data @> '[ { "name": 'name' }]'
Run Code Online (Sandbox Code Playgroud)

注意单引号 - 这是一个无效的查询

如果我使用单引号,我会得到:

WHERE upload_data @> "[ { 'name': 'name' }]"
Run Code Online (Sandbox Code Playgroud)

这是无效的

我已经尝试了其他一些事情,但我想要的是绑定变量评估为带双引号的字符串:

WHERE upload_data @> '[ { "name": "name" }]'
Run Code Online (Sandbox Code Playgroud)

或不同的解决方案 - 除了让刹车员跳过文件。

postgresql sql-injection ruby-on-rails jsonb

4
推荐指数
1
解决办法
880
查看次数