多租户不再头疼:BossAgents 如何让一个 SCSAI 系统安全服务上百家企业?
# 多租户不再头疼:BossAgents 如何让一个 SCSAI 系统安全服务上百家企业?
## 引言:当单一系统遇上多家客户,数据安全怎么破?
想象一下这个场景:你的公司刚刚签下第5家重要客户,每家客户都要求使用 SCSAI agent 来管理他们的产品数据、BOM、变更流程和质量管理。按照传统做法,你有两条路可选——
第一条路:给每家客户单独部署一套 SCSAI 系统。听起来简单?那意味着5套服务器、5套数据库、5套维护成本,还有5套升级工作。当客户扩张到20家、50家时,运维团队直接崩溃。
第二条路:让所有客户共用一套系统。但问题来了——如何保证客户A的采购订单不会被客户B看到?如何确保客户C的工程变更不会影响到客户D的BOM?数据隔离、权限控制、审计追溯……每一项都是技术债。
其实还有第三条路:**多租户架构**。用一个系统,服务多家企业,每家企业的数据天然隔离,互不可见。听起来很美好,但实现起来,很多公司都会踩坑。
今天,我们就来拆解 BossAgents(左帮右臂)是如何在 SCSAI agent 上实现多租户架构的。没有晦涩的技术黑话,只有清晰的逻辑和可落地的方案。
---
## 一、多租户的核心难题:数据隔离
多租户,简单说就是“一套房子,隔成多个独立房间”。每个租户(企业)住一个房间,房间里的一切——文件、数据、配置——都只属于这个租户。
在 SCSAI 系统中实现多租户,最大的挑战是:**如何让不同企业的数据在同一个数据库里安全共存,互不干扰?**
很多团队的直觉是:给每个租户建一套独立的表或数据库。这确实是最彻底的隔离方式,但带来的问题是——
- 数据库数量爆炸,维护成本飙升
- 跨租户查询变得几乎不可能
- 系统升级需要遍历所有租户
BossAgents 选择了另一种路径:**共享数据库,但通过“企业ID”字段实现逻辑隔离**。这就像把一个大办公室用玻璃隔断分成多个工位——空间是共享的,但每个人的工位是独立的。
---
## 二、BossAgents 的多租户架构:一张图看懂
让我们用一个更直观的方式来理解这个架构:
```
┌─────────────────────────────────────────────────────────────┐
│ SCSAI agent 系统 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 所有业务对象(零件、文档、供应商、BOM……) │ │
│ │ 每个对象都带有一个“企业ID”标签 │ │
│ │ 创建时自动打标签,查询时自动过滤 │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
▲
│ 中间层自动注入企业ID
│
┌─────────────────────────────────────────────────────────────┐
│ BossAgents 后端 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ① 认证拦截:从JWT中提取企业ID和用户ID │ │
│ │ ② 数据注入:所有请求自动加上企业ID过滤 │ │
│ │ ③ 本地存储:企业信息、用户、审计日志 │ │
│ │ ④ 邮件推送:携带企业ID发送给智能体 │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
▲
│ API请求(带身份令牌)
│
┌─────────────────────────────────────────────────────────────┐
│ 前端 / Coze 智能体 │
│ 用户登录时选择企业,所有操作自动关联企业 │
└─────────────────────────────────────────────────────────────┘
```
这个架构的精妙之处在于:**数据隔离对用户完全透明**。用户登录自己的企业后,只能看到自己企业的数据,但底层用的是同一套 SCSAI 系统、同一个数据库。
---
## 三、数据模型:如何给每个数据打上“企业标签”
### 3.1 本地数据库:管理企业和用户
BossAgents 维护了一个轻量级的本地数据库,用来管理企业和用户信息。这个数据库很小,只存三样东西:
- **企业信息**:企业ID、名称、管理员邮箱、配置参数
- **用户信息**:用户ID、所属企业、邮箱、角色、密码
- **审计日志**:谁在什么时候做了什么操作
关键设计:**用户必须绑定一个企业**。一个用户可以属于一个企业,但不能同时属于多个企业。这确保了数据归属的清晰性。
### 3.2 SCSAI 数据扩展:给所有业务对象加个“企业ID”
在 SCSAI 系统中,所有核心业务对象——零件(Part)、文档(Document)、供应商(Vendor)、客户(Customer)、BOM、工程变更请求(ECR)、工单(WorkOrder)等等——都增加了一个新字段:`enterprise_id`。
这个字段就像每个数据对象的“身份证”,标明它属于哪个企业。当用户创建一条数据时,系统自动填入该用户所属的企业ID。
有个例外:SCSAI 内置的用户表(Identity)不需要这个字段,因为用户管理已经通过 BossAgents 本地数据库实现了。
---
## 四、权限模型:三层角色,各司其职
多租户系统最怕的就是权限混乱。BossAgents 设计了清晰的三层角色体系:
### 第一层:超级管理员(super_admin)
- **权限范围**:全局,所有企业
- **能做什么**:创建新企业、管理所有企业的用户、查看所有企业的数据
- **谁担任**:系统部署者或平台运营团队
### 第二层:企业管理员(enterprise_admin)
- **权限范围**:仅限本企业
- **能做什么**:管理本企业的用户、查看本企业所有数据、配置Coze邮箱等
- **谁管理**:由超级管理员创建和授权
### 第三层:普通用户(enterprise_user)
- **权限范围**:仅限本企业
- **能做什么**:查看和操作本企业数据,受具体权限限制
- **谁管理**:由企业管理员创建
这套角色体系的关键在于:**超级管理员可以跨企业操作,但普通用户和企业管理员永远只能看到自己企业的数据**。这就像大楼的物业经理(超级管理员)有所有房间的钥匙,但每个房间的住户只能进自己的房间。
---
## 五、核心流程:数据隔离如何自动实现
### 5.1 用户注册与登录
注册流程很简单:
1. 超级管理员创建一个新企业,系统生成唯一的企业ID
2. 超级管理员为该企业创建一个管理员账号
3. 企业管理员登录后,可以创建本企业的普通用户
登录时,用户需要选择自己的企业,然后输入邮箱和密码。系统验证通过后,生成一个JWT令牌,其中包含了用户ID、企业ID和角色信息。这个令牌就像用户的“通行证”,后续所有请求都要带上它。
### 5.2 中间件自动注入企业ID
这是整个架构最核心的环节。当用户发起任何数据操作请求时,BossAgents 后端的认证中间件会:
1. 从请求头中提取JWT令牌
2. 验证令牌有效性,解析出用户ID、企业ID和角色
3. 将企业ID注入到后续的SCSAI查询中
如果是超级管理员,还可以通过一个特殊的请求头(`x-target-enterprise`)来查看任意企业的数据——但这是特权操作,普通用户做不到。
### 5.3 AML 自动注入
SCSAI 使用一种叫做 AML(SCSAI Markup Language)的 XML 格式来与系统交互。BossAgents 的 SCSAI 客户端被增强后,会在发送任何 AML 请求之前,自动在所有 `- ` 标签上添加 `enterprise_id` 属性。
举个例子:当用户A(属于企业001)创建一个新零件时,系统发送给 SCSAI 的 AML 请求会自动变成:
```xml
-
...
```
而 SCSAI 端的所有查询也会自动加上 `WHERE enterprise_id = 'ent_001'` 的条件。这意味着,即使用户A在查询时忘记指定企业,系统也会自动帮他过滤。
这种“自动注入”机制的好处是:**前端和智能体完全不需要关心数据隔离的逻辑**。它们只需要正常发送请求,中间层会自动处理好一切。
### 5.4 邮件推送也带企业标识
当系统需要向 Coze 智能体推送邮件通知(比如库存预警)时,BossAgents 会在邮件标题和内容中明确标注企业ID。Coze 智能体收到通知后,可以通过回调API中的 `x-company-id` 头来识别是哪个企业的请求,从而做出正确的响应。
---
## 六、实现清单:从0到1搭建多租户系统
如果你也想在 SCSAI 上实现多租户,可以参考 BossAgents 的实现路径:
### 第一阶段:基础架构(约2天)
- 建立本地数据库:企业表和用户表
- 实现认证中间件:JWT签发和验证
- 增强SCSAI客户端:自动注入企业ID
- 开发注册登录API
### 第二阶段:企业管理(约1天)
- 超级管理员管理企业的CRUD接口
- 企业管理员管理本企业用户的接口
- SCSAI对象类扩展脚本:给所有业务对象添加企业ID字段
### 第三阶段:前端适配(约1天)
- 登录页增加企业选择功能
- 企业管理后台页面
- 用户管理页面
### 第四阶段:与Coze打通(约0.5天)
- 邮件推送携带企业标识
- Coze回调API支持企业ID识别
---
## 七、写在最后:多租户不是终点,而是起点
多租户架构看似是一个技术问题,实则是一个商业问题。当你的 SaaS 平台需要服务多家企业客户时,多租户能力直接决定了你的扩展性、成本和客户体验。
BossAgents(左帮右臂)的这套多租户方案,核心思路是:**用中间层逻辑代替底层隔离,用自动注入代替人工配置**。它不需要对 SCSAI 系统做任何底层改造,也不需要为每个客户维护独立的数据库,却能实现严格的数据隔离和安全访问。
如果你的企业也在为多租户问题头疼——无论是 SCSAI 系统,还是其他类似的企业级应用——BossAgents 都能帮你快速落地一套安全、高效、可扩展的多租户方案。
毕竟,**技术应该服务于业务,而不是成为业务的瓶颈**。让 BossAgents 帮你搞定多租户,你就可以把精力放在更重要的事情上——服务好你的每一位客户。
BossAgents