Files
wms-saas/docs/03-multi-tenancy.md
T
2026-09-29 13:08:21 +08:00

55 lines
1.3 KiB
Markdown

# 03 SaaS 多租户
## SaaS First
系统必须从第一天支持多租户。
- 采用:**单数据库 + tenant_code**
- 第一阶段不采用:一个租户一个数据库
## 需要租户隔离的表
所有核心业务表原则上都需要 `tenant_code`,例如:
- warehouse
- warehouse_location
- customer
- product
- sku
- inventory
- inbound
- outbound
- shipment
- stock_log
## tenant_code 是核心数据隔离维度
不要依赖开发人员到处手工编写:
```php
Model::where('tenant_code', $tenantCode)
```
应建立统一的租户上下文 **TenantContext**(或类似机制)。
目标:
1. 当前登录用户确定当前 `tenant_code`。
2. 业务 Service / Repository / Query 默认自动限制当前租户。
3. 创建数据时自动写入当前 `tenant_code`。
**严禁出现:租户 A 可以查询到租户 B 数据。**
## 需要特别注意的场景
TenantContext 不只存在于 HTTP 请求中,以下场景同样必须正确设置租户上下文:
- Queue Job(在任务载荷中携带 `tenant_code`,执行时恢复上下文)
- Scheduler / Console Command(按租户遍历执行)
- 第三方 Webhook(根据店铺 / 应用凭证解析租户)
- 缓存 Key、锁 Key(必须带 `tenant_code` 前缀)
## 测试
Tenant Isolation 是核心测试项之一,见 [14-testing.md](./14-testing.md)。