Skip to content

面向 Ruby on Rails CanCanCan 用户的 SpiceDB 指南

INFO

以下内容的重点不是竞争分析,而是帮助现有 Rails 用户理解 SpiceDB 的桥梁。

权限系统的三个核心组件

每个完整的权限系统都包含三个主要元素:

  • 模型(Models) — 定义系统中控制操作的逻辑和规则
  • 数据(Data) — 为操作本身提供上下文(谁在执行操作、操作的对象等)
  • 引擎(Engine) — 解释模型和数据以做出访问控制决策

SpiceDB 和 CanCanCan 都通过这些组件运作,但实现方式不同。

SpiceDB 与 CanCanCan 对比

模型

  • CanCanCan 使用 Ruby 类和方法来定义能力(abilities)。能力定义用纯 Ruby 代码编写,使其灵活但与 Rails 应用紧密耦合。
  • SpiceDB 使用专用的模式语言将权限定义为关系。模式独立于任何应用框架。

数据

  • CanCanCan 将关系数据存储在应用程序数据库中。授权数据与应用数据共存。
  • SpiceDB 维护一个为权限查询优化的专用关系存储。授权数据与应用数据分离。

引擎

  • CanCanCan 在 Rails 应用进程内同步评估权限。授权在进程内发生。
  • SpiceDB 提供专用服务来评估复杂的权限查询。授权作为服务被外部化。

何时使用 SpiceDB 而非 CanCanCan

当您的应用有以下需求时,请考虑使用 SpiceDB:

  • 复杂的层级权限 — 跨组织结构的多个层级管理权限
  • 动态关系管理 — 权限频繁变化且需要实时更新
  • 大规模性能 — 拥有数百万权限关系的系统
  • 跨服务授权 — 多个微服务需要一致的权限评估
  • 基于关系的访问控制(ReBAC) — 基于用户和资源之间关系的权限
  • 审计需求 — 对所有权限决策和变更进行详细跟踪
  • 多租户 — 为不同客户或组织提供隔离的权限模型

何时使用 CanCanCan 而非 SpiceDB

CanCanCan 仍然适用于以下场景:

  • 简单的权限模型 — 具有简单的基于角色或基于属性的访问控制的应用
  • 单体 Rails 应用 — 不需要微服务架构的单一应用
  • 低权限量 — 权限关系数量可控的系统
  • 开发速度 — 快速原型开发,gem 提供更快的初始实现
  • 最小运维开销 — 不需要外部服务依赖
  • 团队熟悉度 — 开发团队已有 CanCanCan 使用经验
  • 资源限制 — 没有额外基础设施预算的项目

本站为独立非官方社区项目 | Independent community project