第 8 章 Red Hat Developer Hub 中的条件策略


Red Hat Developer Hub 中的权限框架提供了由 RBAC 后端插件支持的条件(backstage-plugin-rbac-backend)。条件作为 RBAC 后端插件提供的 Developer Hub 资源的内容过滤器。

RBAC 后端 API 存储分配给数据库中的角色的条件。当您请求访问 frontend 资源时,RBAC 后端 API 会搜索对应的条件,并使用其插件 ID 将它们委派给适当的插件。如果您分配到具有不同条件的多个角色,则 RBAC 后端将使用 anyOf 条件合并条件。

条件条件条件

Developer Hub 中的条件是带有规则和参数的简单条件。但是,条件也可以包含参数或按条件条件组合的参数数组。支持的条件条件包括:

  • allOf: 确保阵列中的所有条件都必须为 true,才能满足组合条件。
  • anyOf: 确保该阵列中至少需要满足组合条件的条件。
  • Not : 确保其中的条件不能满足组合条件。
条件对象

该插件指定条件支持的参数。您可以从 RBAC API 端点访问条件对象模式,以了解如何构建条件 JSON 对象,然后由 RBAC 后端插件 API 使用该对象。

条件对象包含以下参数:

Expand
表 8.1. 条件对象参数
参数类型描述

result

字符串

始终值为 CONDITIONAL

roleEntityRef

字符串

对 RBAC 角色的字符串实体引用,如 role:default/dev

pluginId

字符串

对应的插件 ID,如 目录

permissionMapping

字符串数组

数组权限操作,如 ['read', 'update', 'delete']

resourceType

字符串

插件提供的资源类型,如 catalog-entity

conditions

JSON

带有参数或数组参数的条件 JSON,按条件加入

条件策略别名

RBAC 后端插件(backstage-plugin-rbac-backend)支持在条件策略规则参数中使用别名。在策略评估过程中,条件策略别名会动态地替换为对应的值。条件策略中的每个别名都以 $ 符号作为前缀,代表其特殊功能。

支持的条件别名包括:

  • $current user:此别名替换为请求访问资源的用户的用户实体引用。例如,如果用户从默认命名空间请求访问,$currentUser 将变为 user:default/tom

带有 $currentUser 别名的条件策略对象示例

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["delete"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["$currentUser"]
    }
  }
}
Copy to Clipboard Toggle word wrap

  • $ownerRefs :此别名替换为所有权引用,通常是作为包含用户实体引用和用户的父组实体引用的数组。例如,对于来自 team-a 的用户 Tom,$ownerRefs 将变为 ['user:default/tom', 'group:default/team-a']

带有 $ownerRefs 别名的条件策略对象示例

{
  "result": "CONDITIONAL",
  "roleEntityRef": "role:default/developer",
  "pluginId": "catalog",
  "resourceType": "catalog-entity",
  "permissionMapping": ["delete"],
  "conditions": {
    "rule": "IS_ENTITY_OWNER",
    "resourceType": "catalog-entity",
    "params": {
      "claims": ["$ownerRefs"]
    }
  }
}
Copy to Clipboard Toggle word wrap

8.1. 启用传输父组

默认情况下,Red Hat Developer Hub 在身份验证过程中不会解析间接父组。在这种情况下,在以下组层次结构中,user_alice 用户只是 group_developers 组的成员:

group_admin
  └── group_developers
    └── user_alice
Copy to Clipboard Toggle word wrap

要使用 $ownerRefs 别名时支持多级组层次结构,您可以将 Developer Hub 配置为将间接父组包含在用户的所有权实体中。在这种情况下,user_alice 用户是 group_developersgroup_admin 组的成员。

流程

  • app-config.yaml 文件中启用 includeTransitiveGroupOwnership 选项。

    includeTransitiveGroupOwnership: true
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部