用途:为 Convex 应用添加生产级授权,覆盖 RBAC(基于角色)、ABAC(基于属性)与 ReBAC(基于关系),灵感来自 Google Zanzibar,通过预计算索引实现 O(1) 权限检查。
主要能力:作用域角色与权限、角色继承(inherits)与组合(includes)、通配符权限模式(如 documents:、:read)、过期授权、审计日志、类型安全的 TypeScript 支持、ReBAC 关系元组(subject, relation, object)与图遍历、关系权限桥(defineRelationPermissions)、ABAC 策略与 canWithContext、recomputeUser 重建有效权限、withTenant 跨租户操作,以及 React 的 AuthzProvider、useCanUser、useUserRoles、useRequirePermission 和 PermissionGate。
使用方式:安装 npm install @djpanda/convex-authz;在 convex/convex.config.ts 中注册组件;在 convex/authz.ts 中用 definePermissions、defineRoles 定义权限与角色并创建 Authz 客户端;在函数中调用 authz.require 或 authz.can 检查权限,可传作用域;ReBAC 用 addRelation、hasRelation、removeRelation;ABAC 用 definePolicies 与 canWithContext;React 端需暴露 checkPermission、getUserRoles 等查询,再用 AuthzProvider 包裹应用。
适用场景:需要细粒度访问控制的 Convex 应用,如多租户、团队/文档级权限、角色体系、关系继承与跨租户管理。
限制:ABAC 策略当前均在 can() 读取时求值,type 字段(static/deferred)暂无行为差异;v2 中 IndexedAuthz 不再导出,升级后需对已有用户运行 recomputeUser 回填;inherits 与 includes 为角色定义保留键,不可用作权限资源名。其余细节暂未提供。