我正在尝试将过滤器应用到权限资源 API 端点。
_info
端点显示这些是可能的过滤器选项:
api/v1/security/permissions-resources/_info?q=(keys:!(filters))
{"filters"=>
{"permission"=> [
{"name"=>"Relation", "operator"=>"rel_o_m"},
{"name"=>"No Relation", "operator"=>"nrel_o_m"}
],
"role"=>[
{"name"=>"Relation as Many", "operator"=>"rel_m_m"}
],
"view_menu"=>[
{"name"=>"Relation", "operator"=>"rel_o_m"},
{"name"=>"No Relation", "operator"=>"nrel_o_m"}
]
}
}
如果没有过滤器,权限资源的完整列表将在结果中显示:
api/v1/security/permissions-resources/
"result"=>
[{"id"=>1, "permission"=>{"name"=>"can_read"}, "view_menu"=>{"name"=>"SavedQuery"}},
{"id"=>2, "permission"=>{"name"=>"can_write"}, "view_menu"=>{"name"=>"SavedQuery"}},
{"id"=>3, "permission"=>{"name"=>"can_read"}, "view_menu"=>{"name"=>"CssTemplate"}},
{"id"=>4, "permission"=>{"name"=>"can_write"}, "view_menu"=>{"name"=>"CssTemplate"}},
....
很少尝试检索嵌套的
can_read
权限,到目前为止都失败了:
api/v1/security/permissions-resources/?q=(filters:!((col:permission,opr:rel_o_m,value:can_read)))
The request was incorrectly performed
# not sure if the format is different for nested values
api/v1/security/permissions-resources/?q=(filters:(permission:!((col:name,opr:rel_o_m,value:can_read))))
The request was incorrectly performed
# without the extra internal bracket
api/v1/security/permissions-resources/?q=(filters:(permission:!(col:name,opr:rel_o_m,value:can_read)))
The request was incorrectly performed
我在里森过滤器上尝试了一些其他变体,但没有成功。 希望有人能指出我缺少什么?
据我所知,您无法过滤嵌套字段,您需要做的是首先查询各个表以获取您需要的 ID,然后查询
permissions-resources
例如,我们想要找到
permissions-resources
条目,其中
permission.name == 'can_read'
和 view_menu.name == 'foo'
首先查询
permissions
端点以查找can_read
权限的ID
GET
/api/v1/security/permissions/
?q=(filters:!((col:name,opr:eq,value:'can_read')))
假设这是
1
然后查询
resources
端点以查找foo
视图菜单的ID
GET
/api/v1/security/resources/
?q=(filters:!((col:name,opr:eq,value:'foo')))
假设这是
100
最后,您可以使用
permissions-resources
运算符查询 rel_o_m
,以使用刚刚找到的 ID 进行过滤
GET
/api/v1/security/permissions-resources/
?q=(filters:!((col:permission,opr:rel_o_m,value:1),(col:view_menu,opr:rel_o_m,value:100)))