RBACX六个月回顾:关系型授权、AI策略生成与批量权限检查
过去六个月,RBACX库已从一个基础的RBAC/ABAC引擎演变为一个包含ReBAC和AI生成策略的完整系统。关键安全漏洞已得到修复:编译器中的拒绝覆盖绕过、条件递归导致的DoS攻击,以及HTTP源中的SSRF漏洞。系统现在强制执行MAX_CONDITION_DEPTH=50、verify_ssl验证,并屏蔽私有IP地址。
批量权限检查通过Guard类中的evaluate_batch_async和evaluate_batch_sync方法实现。这解决了UI应用中多个请求的问题,使用asyncio.gather进行并行评估可降低延迟。
decisions = await guard.evaluate_batch_async([
(subject, Action("read"), doc, ctx),
(subject, Action("write"), doc, ctx),
(subject, Action("delete"), doc, ctx),
])
ReBAC:用关系图替代属性
基于关系的授权(ReBAC)引入了“谁授予了什么给谁”的模型,类似于Google Drive或GitHub。权限通过实体图定义:文档所有者委托访问权限。与OpenFGA和SpiceDB的集成支持同步/异步调用,包括对象列表的批量gRPC调用。本地图适用于测试环境。
实现需要基于资源特异性重新设计策略评估,并测试编译路径和解释路径的等效性。
使用大语言模型生成策略
额外的rbacx[ai]包添加了AIPolicy功能,可从OpenAPI模式自动创建策略。流程包括:LLM生成 → JSON模式验证 → 重试 → 代码检查 → 编译。
from rbacx.ai import AIPolicy
ai = AIPolicy(api_key="sk-...", model="gpt-4o")
result = await ai.from_schema(openapi_schema)
guard = Guard(result.policy)
refine_policy用于自然语言优化策略,explain_decision保持引擎的确定性。支持OpenAI、Ollama、Azure及兼容提供商,并设有重试限制。
简写roles: ["admin", "editor"]简化了RBAC配置而不失灵活性。通过AND与condition结合,代码检查器会警告重叠问题。
其他性能改进
- 使用Redis适配器(
rbacx[cache-redis])进行缓存,适用于多主机部署。 - Django ASGI 4.1+的异步适配器。
- 严格类型模式:
Guard(policy, strict_types=True)禁用隐式类型转换。 - 使用
explain=True进行决策追踪,用于调试规则匹配。
这些改进确保了生产环境中的可扩展性:从PyQt UI到微服务架构。
核心要点
- 安全优先:修复了拒绝绕过、DoS递归和SSRF漏洞;采用故障关闭行为。
- ReBAC集成:OpenFGA/SpiceDB支持批量gRPC,本地图用于开发环境。
- AI自动化:从OpenAPI自动生成策略,无需手动编写DSL,包含验证和重试机制。
- 批量权限:为UI和对象列表提供并行评估。
- 性能优化:Redis缓存、异步Django支持、严格类型检查。
— Editorial Team
暂无评论。