Subscrio

面向 .NET 和 TypeScript 开发者的开源权限引擎(Entitlement Engine)

AI编程开发 部分免费

Subscrio 是一款面向 .NET 和 TypeScript 开发者的开源权限引擎(Entitlement Engine),帮助开发者在自己的数据库中管理「用户可以访问哪些功能」的业务逻辑。它不是支付系统,不是用户授权系统,也不是特性开关,而是一个将商业合同、订阅计划、客户定制权限转化为代码可查询结果的中间层。

项目简介

在实际的 SaaS 产品中,商业逻辑的复杂性远超「免费版 vs 付费版」这样简单的二元判断。一个企业客户可能购买了「高级分析」套餐,但同时要求将席位上限从默认的 25 人提升到 40 人;另一个客户可能同时订阅了两个不同的计划,系统需要叠加判断这两个订阅各自授予了什么权限。Subscrio 的设计目标就是让开发者在代码中用一行稳定的关键字查询(如 seat-limit),而把套餐定义、客户定制、叠加规则全部集中在 Subscrio 的数据模型中管理。

核心功能

  1. 产品与套餐定义 — 在数据库中创建 Product(产品)、Feature(功能项)、Plan(套餐),定义每个套餐包含哪些功能、功能的具体值(开关型、数字型、文本型)。
  2. 客户与订阅管理 — 创建 Customer(客户)和 Subscription(订阅)记录,跟踪订阅的生命周期状态(生效中、已取消、已过期)。
  3. 功能查询 API — 应用程序在任何需要判断权限的地方调用 featureChecker.getValueForCustomer(),Subscrio 按「客户定制覆盖 → 套餐定义 → 功能默认值」的优先级返回最终结果。
  4. 客户级权限覆盖 — 支持为单个订阅设置 Feature Override,临时或永久替换套餐中的默认值,用于谈判客户特殊条款、促销期临时解锁等场景。
  5. 功能值类型支持 — 同时支持布尔型(是否允许访问)、数字型(如席位上限、人数限制)和文本型(如套餐名称、配置值)。
  6. 多订阅叠加 — 一个客户可以拥有多个订阅,Subscrio 根据订阅状态和优先级规则计算最终权限。
  7. 官方扩展生态 — 提供审计日志(Audit Log)和 Stripe 支付集成两个官方扩展,支持开箱即用的日志记录和支付事件驱动订阅更新。
  8. 可选管理后台 — MIT 开源引擎免费使用,独立出售的 Web Admin 提供图形化管理界面和 REST API,方便运营人员管理客户、套餐和订阅,无需直接操作数据库。

技术实现

Subscrio 包含两套主要实现:TypeScript 版(npm 包 subscrio,依赖 PostgreSQL)和 .NET 版(NuGet 包 Subscrio.Core,支持 PostgreSQL 和 SQL Server)。两个实现共享相同的概念数据模型,但 API 风格和数据访问层完全贴合各自生态(TypeScript 使用 async/await 和 Typed API,.NET 使用 C# 异步编程和依赖注入)。Rust 实现正在规划中,尚未发布。

数据模型层面,核心实体包括:Product(产品分组)、Feature(功能定义,含键名、值类型、默认值)、Plan(套餐,分配各功能值)、Billing Cycle(计费周期)、Customer(客户)、Subscription(订阅,连接客户与套餐,含生命周期状态)、Feature Override(客户定制覆盖)。应用程序通过稳定字符串键(如 analytics-seat-limit)而非数据库 ID 来引用功能,确保业务层与存储层解耦。

数据库方面,订阅和套餐数据完全存储在你自己的数据库中,不依赖任何第三方托管服务,Entitlement 解析逻辑在你的应用进程内执行,无需额外的微服务调用。

快速上手

  1. 安装依赖。 TypeScript 项目运行 npm install subscrio,.NET 项目通过 dotnet add package Subscrio.Core 添加包。
  2. 初始化数据库。 按照对应语言仓库的 README 说明执行数据库迁移脚本,创建 subscrio 相关的表结构。
  3. 配置套餐数据。 通过管理后台或配置同步功能(config sync)定义产品、功能项和套餐,或直接在代码中调用 API 创建。
  4. 在业务代码中查询。 注入 FeatureChecker 服务,调用 getValueForCustomer 方法,传入租户标识、产品标识、功能键名和默认值,获取该客户当前的实际权限值。
  5. 集成可选扩展。 如需审计能力,安装 subscrio-audit-log(TypeScript)或 Subscrio.AuditLog(.NET);如需 Stripe 支付集成,安装 subscrio-payments 或 Subscrio.Payments。

适用人群

  • SaaS 产品后端开发者:需要精细化管理不同客户的功能权限、席位限制、套餐叠加逻辑。
  • 平台类产品架构师:产品需要支持多租户、多套餐、多订阅组合的商业模型,且希望将权限判断逻辑从业务代码中剥离。
  • 集成多支付渠道的团队:已经使用 Stripe 收款的团队,希望将付款事件自动转化为订阅状态的更新,减少人工操作。
  • 需要透明权限系统的企业:希望在数据库中清晰记录每个客户拥有的具体权限,而不是散落在业务代码的 if-else 条件分支中。

开发者备注

Subscrio 由独立开发者 Jasen Fici 创建并维护,采用 MIT 许可证开源。代码库分为多个仓库(主仓库 + TypeScript 实现仓库 + .NET 实现仓库 + 扩展仓库),本地开发时需将相关仓库克隆到同一工作区根目录以解析文件依赖。产品尚未发布 1.0 版本,API 在不同版本间可能有变化,但已在多个商业产品中实际使用。

官网:https://subscrio.com 文档:https://docs.subscrio.com GitHub:https://github.com/subscrio/subscrio

团队信息

由 AI 猎手自动发现

评论与建议

0 条评论