Zed 语言基础入门:SpiceDB 权限模型核心语法详解

Zed 语言简介

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

authzed/spicedb

它提供了一种 声明式的语法 来描述复杂的权限结构。

主要概念

  • 对象类型 (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 语言的核心优势在于其表达能力强且易于理解,能够清晰地描述复杂的权限层次结构和继承关系,非常适合构建细粒度的权限控制系统。

相关文章推荐:

演示了为无线无人机电池充电设计的感应电力传输(IPT)系统 Dynamic Wireless Charging for (UAV) using Inductive Coupling 模拟了为无人机(UAV)量身定制的无线电力传输(WPT)系统。该模型演示了直流电到高频交流电的转换,通过磁共振在气隙中无线传输能量,以及整流回直流电用于电池充电。 系统拓扑包括: 输入级:使用IGBT/二极管开关连接到全桥逆变器的直流电压源(12V)。 开关控制:脉冲发生器以85 kHz(周期:1/85000秒)的开关频率运行,这是SAE J2954无线充电标准的标准频率。 耦合级:使用互感和线性变压器块来模拟具有特定耦合系数的发射(Tx)和接收(Rx)线圈。 补偿:包括串联RLC分支,用于模拟谐振补偿网络(将线圈调谐到谐振频率)。 输出级:桥式整流器(基于二极管),用于将高频交流电转换回直流电,以供负载使用。 仪器:使用示波器块进行全面的电压和电流测量,用于分析输入/输出波形和效率。 模拟详细信息: 求解器:离散Tustin/向后Euler(通过powergui)。 采样时间:50e-6秒。 4.主要特点 高频逆变:模拟85 kHz下IGBT的开关瞬态。 磁耦合:模拟无人机着陆垫和机载接收器之间的松耦合行为。 Power GUI集成:用于专用电力系统离散仿真的设置。 波形分析:预配置的范围,用于查看逆变器输出电压、初级/次级电流和整流直流电压。 5.安装与使用 确保您已安装MATLAB和Simulink。 所需工具箱:必须安装Simscape Electrical(以前称为SimPowerSystems)工具箱才能运行sps_lib块。 打开文件并运行模拟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值