GrantForgeDocs

    技术文档

    多租户与数据隔离

    租户如何隔离数据,哪些数据是平台共享的,以及跨租户操作的约束。

    隔离方式

    除平台共享的数据外,每张业务表都有 tenant_id 列。请求进入时,过滤链把登录账号所在的租户绑定到当前线程,Hibernate 的租户过滤器自动给查询加上租户条件,写入时自动填写 tenant_id。业务代码无法“忘记”加租户条件。

    需要跨租户的少数场景(例如登录时按用户名找账号、统计各租户账号数、后台定时任务)必须显式进入“系统上下文”,代码评审可以一眼找到它们。

    共享与独立

    平台共享 每个租户独立
    应用与资源目录、API 目录、OAuth 客户端、插件 账号、部门、用户组、岗位、角色、授权、分配、数据与字段策略、职责分离、申请与复核、身份源、数据服务、审计

    用户名在整个平台内唯一,因此登录时不需要选择租户。

    平台租户

    平台租户由初始化创建,不能停用。它的管理员管理平台共享的数据与其他租户;只有平台租户的角色可以使用“全部租户”的数据范围。

    ID

    所有主键都是 TSID:64 位、按时间有序、在集群中由节点号保证唯一。它们大于 JavaScript 能精确表示的整数,因此在 JSON 中一律以字符串传递。集群中每个实例需要不同的 GRANTFORGE_ID_NODE。

    在 GitHub 上编辑此页