隔离方式
除平台共享的数据外,每张业务表都有 tenant_id 列。请求进入时,过滤链把登录账号所在的租户绑定到当前线程,Hibernate 的租户过滤器自动给查询加上租户条件,写入时自动填写 tenant_id。业务代码无法“忘记”加租户条件。
需要跨租户的少数场景(例如登录时按用户名找账号、统计各租户账号数、后台定时任务)必须显式进入“系统上下文”,代码评审可以一眼找到它们。
共享与独立
| 平台共享 | 每个租户独立 |
|---|---|
| 应用与资源目录、API 目录、OAuth 客户端、插件 | 账号、部门、用户组、岗位、角色、授权、分配、数据与字段策略、职责分离、申请与复核、身份源、数据服务、审计 |
用户名在整个平台内唯一,因此登录时不需要选择租户。
平台租户
平台租户由初始化创建,不能停用。它的管理员管理平台共享的数据与其他租户;只有平台租户的角色可以使用“全部租户”的数据范围。
ID
所有主键都是 TSID:64 位、按时间有序、在集群中由节点号保证唯一。它们大于 JavaScript 能精确表示的整数,因此在 JSON 中一律以字符串传递。集群中每个实例需要不同的 GRANTFORGE_ID_NODE。
