init
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
---
|
||||
description: 多租户 tenant_code 隔离规则(后端模型、查询、任务、缓存)
|
||||
globs: backend/app/**/*.php,backend/database/**/*.php,backend/routes/**/*.php
|
||||
alwaysApply: false
|
||||
---
|
||||
# 租户隔离
|
||||
|
||||
详见 `docs/03-multi-tenancy.md`。**严禁租户 A 查询或修改租户 B 的数据。**
|
||||
|
||||
- 方案:单数据库 + `tenant_code`;所有核心业务表必须有 `tenant_code`。
|
||||
- 通过 TenantContext + 全局 Scope / Trait 自动过滤查询、自动填充 `tenant_code`,不要到处手写 where。
|
||||
|
||||
```php
|
||||
// ❌ 手工拼接,容易遗漏
|
||||
Sku::where('tenant_code', $request->user()->tenant_code)->get();
|
||||
|
||||
// ✅ 模型使用租户 Trait,查询自动限定当前租户
|
||||
Sku::query()->get();
|
||||
```
|
||||
|
||||
- 绕过租户 Scope(`withoutGlobalScope`)只允许出现在平台级管理功能中,并需注释说明原因。
|
||||
- 根据业务编码查找数据时,也必须受租户限制(编码只在租户内唯一)。
|
||||
- Queue Job 必须携带 `tenant_code`,执行时恢复 TenantContext。
|
||||
- Scheduler / Console Command 按租户遍历执行,不能一次性处理全部租户数据而不区分。
|
||||
- Webhook 根据店铺 / 应用凭证解析租户后再处理。
|
||||
- 缓存 Key、锁 Key 必须带 `tenant_code` 前缀。
|
||||
- 新增接口需有租户隔离测试。
|
||||
Reference in New Issue
Block a user