Apache Superset API 请求权限过滤器以获取权限资源上的嵌套属性

问题描述 投票:0回答:1

我正在尝试将过滤器应用到权限资源 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

我在里森过滤器上尝试了一些其他变体,但没有成功。 希望有人能指出我缺少什么?

apache-superset
1个回答
0
投票

据我所知,您无法过滤嵌套字段,您需要做的是首先查询各个表以获取您需要的 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)))
© www.soinside.com 2019 - 2024. All rights reserved.