SuperAPI AI 工具集

laravel-multi-tenancy

编程与开发

查看项目

更新于 10-16 06:23

技能介绍

用途:面向 Laravel 多租户应用,提供将应用逻辑拆分为中央(central,非租户)与租户(tenanted)两类上下文的架构模式,适用于需要每客户独立数据库、严格数据隔离的 SaaS 或合规场景;若仅需简单用户分层或共享同一 schema,则不建议使用。

主要能力:

  1. 结构划分:用 app/Actions/Central 与 app/Actions/Tenanted、app/Data/Central 与 app/Data/Tenanted、routes/central.php 与 routes/tenant.php 等区分中央与租户代码;模型统一放在 app/Models/,靠 trait/接口而非子目录区分中央与租户模型。
  2. 数据库隔离:每租户独立数据库,Central Action(如 CreateTenantAction)负责建租户与建库;Tenanted Action 在租户上下文内执行,查询自动限定当前租户。
  3. 上下文辅助:TenantContext 提供 current()、id()、isActive()、run($tenant, $callback)、runCentral($callback) 等方法。
  4. 租户识别:中间件可基于 domain(InitializeTenancyByDomain)、subdomain(InitializeTenancyBySubdomain)或请求头(InitializeTenancyByRequestData,如 $header = 'X-Tenant')。
  5. 队列:任务使用 TenantAwareJob,并在构造中接收 TenantWithDatabase 以保留租户上下文。

使用方式:在 bootstrap 中分别注册 central 与 tenant 路由组;在 routes/tenant.php 使用 tenant 中间件,在 routes/central.php 使用 central 中间件;通过 TenantContext::run 在指定租户中执行代码,通过 runCentral 访问中央数据;队列任务派发时传入 TenantContext::current()。

限制:资料未提供具体安装命令、版本要求、依赖包安装细节、价格或性能数据;多租户会增加复杂度,仅在数据隔离确有必要时采用。