检索项目层级的新查询参数¶
bp hierarchical-multitenancy-improvements
现在我们已经实现了分层多租户的基本实现,我们需要通过添加新功能来提高其健壮性和可用性。
问题描述¶
在第一个版本中,我们实现了分层多租户的基本功能,包括以下内容:
通过在项目表中添加 parent_id 字段来创建项目层级;
获取项目父级、子树和完整层级;
删除没有子项目的项目(叶子项目);
授予/检查/撤销沿项目层级向下继承的角色分配。
充分支持分层多租户需要以下改进:
添加一种新的返回项目层级格式,以更好地反映层级结构(例如,字典的层级结构)。
提议的变更¶
当前实现的 GET /projects/{project_id}?subtree_as_list 和 GET /projects/{project_id}?parents_as_list 调用返回一个非结构化列表,其中包含调用者有权访问的层级中的项目。在某些用例中,例如分层配额检查(https://review.openstack.org/#/c/129420/),需要完整的层级结构,但只需要项目 ID 而不需要完整的项目信息。由于 ID 不包含任何关于项目的敏感信息,因此可以在没有任何限制的情况下返回它。
为了改进当前实现,我们需要执行两个主要步骤:新的 GET /projects/{project_id}?subtree_ids 和 GET /projects/{project_id}?parents_ids 调用。
新的 GET /projects/{project_id}?subtree_ids 调用,将以嵌套字典的形式返回子树,其中每个节点将包含其直接子节点的条目。考虑以下层级结构:
+------------------------+ | A | | | | / \ | | | | / \ | | | | B C | | | | / \ / \ | | | | / \ / \ | | | | D E F G | +------------------------+
对于这个层级结构,当用户请求项目 A 的 subtree_ids 时,将返回以下信息:
{ "subtree": { "B": { "D": null, "E": null }, "C": { "F": null, "G": null } } }
GET /projects/{project_id}?parents_ids 调用也将执行相同的操作。因此,如果用户请求项目 D 的 parents_ids,将返回以下信息:
{ "parents": { "B": { "A": null } } }
将有一个约束,防止用户同时传递“subtree_as_list”和“subtree_ids”过滤器,以及“parents_as_list”和“parents_ids”。
备选方案¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
新的 API 调用必须在 python-keystoneclient 中反映。
GET subtree_ids
GET parents_ids
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
新的 API 调用将可用
GET /projects/{project_id}?subtree_ids
GET /projects/{project_id}?parents_ids
实现¶
负责人¶
- 主要负责人
Raildo Mascena raildo
- 其他贡献者
Rodrigo Duarte rodrigodsousa
Henrique Truta henrique-4
Samuel Medeiros samuelmdq
Adam Young ayoung
工作项¶
实现获取层级的新选项:使用嵌套字典返回层级结构。
依赖项¶
无
文档影响¶
我们必须根据这些更改更新 API 文档(Identity API v3)。