租户、宿主与数据过滤器
ToRun 构建在 ABP Framework 的多租户模型之上。标记为 IsMultiTenant 的行带有 TenantId 列,框架会自动按它过滤;在某个租户上下文中执行的查询,永远看不到另一个租户的行。宿主上下文(TenantId == null)看到的是单独的一部分:SubscriptionPlan、AiProvider 和 LegalDocument 等标准目录就在那里。
为什么我们把宿主当作完整的参与者
大多数 SaaS 产品把宿主作为"管理工具"附加上去。我们把宿主建模为一个兄弟租户:宿主有自己的仪表板、自己的 AI 策略和自己的计费关系。这让我们能在每位客户都在使用的同一套组件上运行我们自己的生产流量。
按租户绑定套餐的功能
订阅套餐包含 FeatureLimit、Entitlement、Capability 和 Mode 行。租户启用套餐后,其可用功能集合是该套餐与全局目录的交集。新增一种模式不需要逐个改动租户:只要租户所持套餐包含该模式,就会自动获得。
每次调用时注入 BYOK
即使基础设施是共享的,BYOK 凭据也仅限于拥有它们的租户。每个 AI 请求都会以同一个数据过滤器在租户上下文中解析凭据;在存储层,密钥不可能在租户之间泄露。
我们有意不做的事
我们不在数据库或进程层面隔离租户。为每个租户单独扩展一个数据库的成本,会摧毁多租户 SaaS 产品的单位经济。只要架构从第一天起就为此设计,数据过滤器加上按租户划分的缓存就足够了。