Zed 语言简介
Zed 是专门用于 SpiceDB 的模式(Schema)定义语言,用于定义权限模型中的对象类型、关系和权限规则。

它提供了一种 声明式的语法 来描述复杂的权限结构。
主要概念
- 对象类型 (Object Type): 定义实体类型及其权限结构
- 关系 (Relation): 描述对象之间的关联关系
- 权限 (Permission): 基于关系和其他权限计算出的布尔值规则
- 用户集 (UserSet): 可以被授权访问的对象集合
Schema 示例详解
// 定义用户对象类型
definition user {}
// 定义文档对象类型
definition document {
// 关系定义
relation viewer: user | usergroup#member
relation editor: user | usergroup#member
relation owner: user
// 权限定义
permission read = viewer + editor + owner
permission write = editor + owner
permission delete = owner
permission share = owner
}
// 定义用户组对象类型
definition usergroup {
relation member: user
relation manager: user
permission manage = manager
}
示例说明
1. 对象类型定义
definition document {
// ...
}
这定义了一个名为 document 的对象类型,表示文档资源。
2. 关系定义
relation viewer: user | usergroup#member
viewer是一个关系名称user | usergroup#member表示可以是用户或者用户组的成员- 这允许直接给用户赋予权限,也可以通过用户组间接赋予
3. 权限定义
permission read = viewer + editor + owner
read是权限名称viewer + editor + owner表示只要属于这三个关系中的任何一个,就拥有读权限- 使用
+操作符表示逻辑"或"关系
4. 更复杂的示例
definition organization {
relation admin: user
relation member: user
permission manage = admin
}
definition folder {
relation parent: folder | organization
relation owner: user | organization#admin
relation editor: user | usergroup#member
relation viewer: user | usergroup#member
permission read = viewer + editor + owner + parent->read
permission write = editor + owner + parent->write
permission delete = owner
}
在这个例子中:
parent->read表示继承父级的读权限organization#admin表示组织的管理员角色
高级特性
条件表达式
definition document {
relation viewer: user
relation banned: user
// 只有viewer且不是banned的用户才能读取
permission read = viewer - banned
}
复杂权限组合
definition resource {
relation admin: user
relation moderator: user
relation member: user
// 使用括号控制优先级
permission manage = admin + (moderator - member)
}
Zed 语言的核心优势在于其表达能力强且易于理解,能够清晰地描述复杂的权限层次结构和继承关系,非常适合构建细粒度的权限控制系统。
相关文章推荐:
5806

被折叠的 条评论
为什么被折叠?



