Permify权限系统从v1.0升级到v1.1的全面指南
Permify是一个现代化的权限服务系统,它使用声明式的权限语言来定义和管理复杂的权限模型。在v1.1版本中,Permify引入了一些重要的语法和API变更,本文将详细介绍这些变化,帮助开发者顺利完成版本升级。
一、DSL上下文访问方式变更
在权限规则中访问上下文数据的方式发生了重要变化,这是v1.1最显著的语法改进。
v1.0的上下文访问方式
在v1.0版本中,开发者需要通过request.field_name
的方式访问传入的上下文数据:
entity account {
permission withdraw = check_balance(request.amount, balance) and owner
}
这种方式需要显式地将参数传递给规则函数,增加了代码冗余。
v1.1的新访问方式
v1.1引入了更简洁的context.data
对象来访问上下文数据:
entity account {
permission withdraw = check_balance(balance) and owner
}
rule check_balance(balance double) {
(balance >= context.data.amount) && (context.data.amount <= 5000)
}
这种改进带来了以下优势:
- 减少了参数传递,使规则定义更加简洁
- 上下文数据集中管理,提高了代码可读性
- 更符合现代编程语言的访问习惯
二、查询实体范围的新特性
v1.1为实体查询API引入了scope
字段,这是一个强大的过滤机制。
范围限定功能详解
scope
字段允许开发者对查询结果进行精细控制,例如:
"scope": {
"repository": {
"data": ["r1", "r2"]
},
"organization": {
"data": ["o2"]
}
}
这个特性特别适用于以下场景:
- 多租户系统中限制查询范围
- 大型系统中提高查询性能
- 实现基于数据分区的权限检查
完整请求示例
{
"metadata": {
"snap_token": "your_token",
"schema_version": "1.1",
"depth": 100
},
"entity_type": "repository",
"permission": "edit",
"subject": {
"type": "user",
"id": "u1",
"relation": ""
},
"scope": {
"repository": {
"data": ["r1", "r2"]
},
"organization": {
"data": ["o2"]
}
},
"page_size": 20,
"continuous_token": ""
}
三、分页限制的移除
v1.1取消了对page_size
字段的最大值限制(原v1.0限制为100),这一变化带来了更大的灵活性:
- 可以一次性获取更多结果,减少API调用次数
- 适用于需要完整数据集的分析场景
- 开发者可以根据实际需求自由设置分页大小
升级建议
- 逐步迁移:先在不影响生产环境的分支上测试v1.1的变更
- 语法检查:重点关注DSL中上下文访问方式的修改
- 性能测试:特别是使用大page_size的场景
- 文档更新:确保团队文档与v1.1特性保持同步
Permify v1.1的这些改进使权限系统更加灵活和强大,同时也保持了向后兼容性。理解这些变化将帮助开发者更好地利用Permify构建安全、高效的权限系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考