多租户绑定概述
本文介绍当第三方应用也是多租户系统时,如何建立 IM 工作空间与第三方应用租户的绑定关系。
什么是多租户绑定?
当您的应用是一个多租户系统(如 SaaS 应用)时,需要建立 IM 工作空间 与 第三方应用租户 的绑定关系。
绑定关系特点
- 一对一绑定 - 一个 IM 工作空间只能绑定到一个第三方应用租户
- 双向唯一 - 一个第三方应用租户只能被一个 IM 工作空间绑定
- 数据隔离 - 绑定后,该工作空间的用户只能访问对应租户的数据
绑定关系模型
┌─────────────────────────────────────────────────────────────────┐
│ 绑定关系示意图 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ IM 系统 第三方应用(如 OA) │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 工作空间 A │──────────────│ 租户 1(公司A) │ │
│ │ (workspace_id=1)│ 绑定关系 │ (tenant_id=1) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 工作空间 B │──────────────│ 租户 2(公司B) │ │
│ │ (workspace_id=2)│ 绑定关系 │ (tenant_id=2) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 工作空间 C │ ✗ │ 租户 3(公司C) │ │
│ │ (workspace_id=3)│ 未绑定 │ (tenant_id=3) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
两种绑定类型
1. 工作空间绑定
建立 IM 工作空间与第三方应用租户的绑定关系:
| IM 工作空间 | 第三方应用租户 | Bot Token |
|---|---|---|
| 工作空间 A (id=1) | 租户 1 (公司A) | token_xxx |
| 工作空间 B (id=2) | 租户 2 (公司B) | token_yyy |
2. 用户绑定
建立 IM 用户与第三方应用用户的绑定关系:
| IM 用户 | 第三方应用用户 | 绑定方式 |
|---|---|---|
| 张三 (im_user_id=123) | admin (user_id=1) | installer_auto |
| 李四 (im_user_id=456) | zhangsan (user_id=2) | manual |
绑定时机
工作空间绑定
在 应用安装 时建立:
- 用户在 IM 中点击安装应用
- 跳转到第三方应用,用户登录并选择租户
- 确认安装后,建立工作空间与租户的绑定关系
用户绑定
有三种绑定方式:
| 绑定方式 | binding_method | 触发时机 | 说明 |
|---|---|---|---|
| 安装时自动绑定 | installer_auto | 应用安装时 | 安装者自动绑定,无需手动操作 |
| 手动绑定 | manual | 首次 SSO 登录时 | 其他用户需要手动登录并绑定 |
| OAuth 绑定 | oauth | OAuth 授权流程 | 通过标准 OAuth 流程绑定 |
安装流程中的多租户处理
典型场景
场景 1:OA 系统集成
公司 A 使用 IM 作为内部沟通工具,同时使用 OA 系统处理审批流程:
- 管理员在 IM 工作空间 A 中安装 OA 应用
- 登录 OA 系统,选择公司 A 的租户
- 建立绑定:工作空间 A ↔ OA 租户(公司A)
- 员工在 IM 中点击 OA 应用,自动登录到公司 A 的 OA 系统
场景 2:多公司集团
集团下有多个子公司,每个子公司有独立的 IM 工作空间和 OA 租户:
| 子公司 | IM 工作空间 | OA 租户 |
|---|---|---|
| 子公司 A | 工作空间 1 | 租户 1 |
| 子公司 B | 工作空间 2 | 租户 2 |
| 子公司 C | 工作空间 3 | 租户 3 |
每个子公司的员工只能访问自己公司的 OA 数据。