Skip to content

属性

如果您正在从现有的授权系统迁移到 SpiceDB,属性很可能在您的授权评估中发挥着作用。

SpiceDB 可以在复杂的访问控制逻辑(如角色和关系)之外评估属性。本指南提供了实用的 Schema 语言示例,用于实现各种属性类型。

布尔属性

布尔或二值属性作为影响授权决策的开关,例如功能标志授权。

循环关系

循环关系通过将对象与自身关联来实现布尔属性。例如,用户只有在满足以下条件时才能查看文档:

  • 用户与文档有 editor 关系
  • 文档的编辑功能已启用

要启用编辑功能,写入一个循环关系,使文档通过 edit_enabled 关系与自身关联(例如 document:1#edit_enabled@document:1)。这允许关系引用自身来确定编辑器访问权限。

WARNING

SpiceDB Schema 语言中没有机制强制关系必须用作循环关系。请实现客户端逻辑以防止误用,例如 document:1#edit_enabled@document:2

通配符

通配符允许与资源类型的所有对象建立关系,而无需逐个建立对象关系。在此模式中,用户在同时满足以下两个条件时获得 edit 权限:

  • 与文档有 editor 关系
  • 通过 edit_enabled 关联

建立如下关系:document:somedocument#edit_enabled@user:*

INFO

Authzed Materialize 目前不支持通配符。如果计划集成 Materialize,请使用循环关系来实现二值属性。

属性匹配

当用户需要具有资源所要求的特定属性才能执行操作时,就会发生属性匹配。

匹配单一类型中至少一个属性

用户必须匹配文档的至少一个国家属性才能查看它。国家属性被表示为对象,用户作为成员与之关联,文档与所需国家关联。

匹配单一类型中的所有属性

使用交叉箭头要求用户匹配文档的所有国家属性才能获得访问权限,而不是只需匹配至少一个。

匹配每种类型中至少一个属性

当存在多种属性类型(如国家和状态)时,为每种类型创建对象定义,并使用主体关系将资源与所需属性连接。用户需要匹配每种类型中的至少一个属性。

匹配每种类型中的所有属性

使用交叉箭头,用户必须匹配所有国家状态属性才能获得文档访问权限,而不是只需匹配每种类型中的至少一个属性。

Caveat 与 Schema 建模

Caveat 应仅在评估 CheckPermission 请求所需的数据只在请求时才可用时使用(例如用户的当前位置或当天时间)。

对静态数据(例如文档的状态)使用 Caveat 可能会对性能产生负面影响。静态属性数据应始终使用上述描述的模式在 Schema 中建模。

本站为独立非官方社区项目 | Independent community project