TIP
原文: 查看英文原文 English: View English version
属性
如果您正在从现有的授权系统迁移到 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 中建模。