带有 Ory Keto 的 RBAC 和对象所有权

Kit*_*Cat 1 authorization rbac ory

我试图通过 Ory Keto 实现以下几点:

  1. UserA拥有ProductA-> 所有权赋予一项 CRUD 权利。
  2. UserB具有角色Admin->Admin赋予一个对所有事物的 CRUD 权限。
  3. UserA具有角色KYCVerified或属于名为KYCVerified-> 的组的一部分,这为用户提供了额外的权限。

第 1 点描述了所有权的概念,根据 Ory Keto 的当前状态,将其描述为 RBAC 的缺点之一(来源):

不存在所有权概念:Dan 是文章“Hello World”的作者,因此可以更新它。

第 2 点描述了一个基本上通过了所有权检查的角色,因为这个角色可以做所有事情。这在当前状态下应该是可能的,但不能与第 1 点结合使用。

第 3 点描述的内容与第 2 点基本相同,但这更针对我的用例。

我在Ory网站上读过这篇文章和这篇文章。然而,我仍然无法理解这个概念。我举了以下例子来说明我如何看待 Ory Keto 的所有权概念:

# Tenant TenantA needs to be a owner of product ProductA in order to view it
products:ProductA#view@(tenants:TenantA#owner)

# Tenant A is a owner of ProductA
tenants:ProductA#owner@TenantA
Run Code Online (Sandbox Code Playgroud)

但这会产生很多规则,我什至不确定这是否是正确的方法。

zep*_*rik 6

从这一刻起你是对的。您必须手动创建一堆元组。完整的元组集应该类似于:

products:ProductA#owner@UserA
products:ProductA#crud@(products:ProductA#owner)
roles:admin#member@UserB
products:ProductA#crud@(roles:admin#member)
products:ProductA#additional_permissions@(roles:KYCVerified#member)
roles:KYCVerified#member@UserA
Run Code Online (Sandbox Code Playgroud)

https://github.com/ory/keto/pull/877开始,您现在可以定义全局重写:

products:ProductA#owner@UserA
products:ProductA#crud@(products:ProductA#owner)
roles:admin#member@UserB
products:ProductA#crud@(roles:admin#member)
products:ProductA#additional_permissions@(roles:KYCVerified#member)
roles:KYCVerified#member@UserA
Run Code Online (Sandbox Code Playgroud)

这样你就必须创建这些元组:

products:ProductA#owners@UserA
roles:admin#members@UserB
roles:KYCVerified#members@UserA

products:ProductA#admins@(roles:admin)
products:ProductA#additional_permissions@(roles:KYCVerified)
Run Code Online (Sandbox Code Playgroud)

请注意,不可能(目前还没有计划)定义一个admin可以访问所有内容的组。您始终必须在对象和主题之间建立某种关系才能查询/重写它。admins这就是存在和关系的原因special_roles