多租户隔离(ENABLE_MULTI_TENANT)
平台支持多租户模式:开启后,不同"租户(组织)"之间的数据互相隔离,适合一套平台给多个组织/团队使用。
默认关闭(ENABLE_MULTI_TENANT=False,见 myapp/config.py:766)。
租户怎么划分
- 租户由用户的
org(组织标识) 字段决定:org相同的用户属于同一租户(见myapp/security.py:64)。 org在「用户列表」里维护;多租户开启后,非系统用户的org字段在表单中只读,默认就是自己的org(myapp/security.py:334-343)。
三种可见范围
多租户开启后,几乎所有业务列表都会按下面的规则过滤(每个视图各有一个 *_Filter,逻辑一致,
可参考 myapp/views/view_notebook.py:51-54、view_inferenceserving.py 等):
| 身份 | 判定 | 能看到 |
|---|---|---|
| 系统管理员 | username=='admin' 或 org=='system' 或 org 为空(is_system(),myapp/security.py:144) |
全部租户的数据 |
| 租户管理员 | 该租户内的 admin 角色(is_admin()) |
**本租户(同 org)**的数据 |
| 普通用户 | 其余 | 主要是自己的数据(叠加项目组/责任人等既有权限) |
即:
org='system'或用户名admin是跨租户的"超级管理员";每个租户内再设自己的 admin 作为"租户管理员"。
影响范围
多租户过滤覆盖几乎所有资源视图(约 35 个),包括:项目组、机器/节点资源、存储资源、Notebook、
任务流/任务、推理服务/内部服务、模型、数据集/维表/库表、镜像、消息、账单、整体资源等
(即 myapp/views/ 下大量 view_*.py 都引用了 ENABLE_MULTI_TENANT)。具体每个模块的过滤细节以对应
view_*.py 中的 *_Filter 为准。
启用步骤
- 在
config.py设ENABLE_MULTI_TENANT=True。 - 给各用户设置
org(同组织同值);跨租户的超级管理员用admin或把org设为system。 - 每个租户内指定该租户的 admin 角色用户作为租户管理员。
- 重启后端生效。
相关:项目组专属命名空间
ENABLE_SPECIFY_NAMESPACE(config.py:784)可与多租户配合做更强的 K8s 命名空间级隔离,见 配置项速查.md。