本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
要增强上一节中的 RBAC 示例,您可以向用户添加属性。

此示例包含与上一个示例相同的角色,但添加了用户属性account_lockout_flag
。这是用户特定的属性,与任何特定角色均无关联。您可以使用之前在本示例中使用的 RBAC 外部数据:
{
"roles": {
"tenant_a": {
"all_access_role": ["viewData", "updateData"]
},
"tenant_b": {
"update_data_role": ["updateData"],
"view_data_role": ["viewData"]
}
}
}
可以将account_lockout_flag
用户属性作为用户 Bob 的 OPA 查询输入的一部分传递给数据服务:/viewData/tenant_a
{
"tenant_id": "tenant_a",
"role": "all_access_role",
"path": ["viewData", "tenant_a"],
"method": "GET",
"account_lockout_flag": "true"
}
查询访问决策的规则与前面的示例类似,但包括另外一行用于检查该account_lockout_flag
属性:
default allowViewData = false
allowViewData = true {
input.method == "GET"
input.path = ["viewData", tenant_id]
input.tenant_id == tenant_id
role_permissions := data.roles[input.tenant_id][input.role][_]
contains(role_permissions, "viewData")
input.account_lockout_flag == "false"
}
此查询返回的授权决定为false
。这是因为true
适用于 Bob,而 Rego 规则allowViewData
拒绝访问,尽管 Bob 的角色和租户account_lockout_flag attribute
是正确的。