多租模型概述
背景
当用户需要在租户的层面做资源隔离时,可在AstroPro中配置多租模型来达到资源隔离的目的。
原理
AstroPro实现多租隔离的方式是通过在需要做资源隔离的对象上额外生成一个tenant_id的字段来存储租户信息,在用户访问接口时,将调用者的租户信息存放在线程变量中(存放方式在用户自定义租户id获取接口中详细说明),通过对比线程中的租户信息和对象中的租户信息是否一致来实现租户隔离的。
用户需要在业务代码中添加租户相关的校验逻辑,具体逻辑如下:
- 新增时:需要在业务代码中将tenant_id设置到新增对象中。
- 查询时:先查出数据,再判断查出对象的tenant_id值是否和当前线程tenant_id匹配,只有匹配时才返回,不匹配时证明操作的不是当前租户的资源,此次请求不合法,抛出异常。
- 修改、删除时:先查出数据,再判断查出对象的tenant_id值是否和当前线程tenant_id匹配,只有匹配后才进行后续的修改或删除操作。
在生成用户自定义租户id获取接口代码时,以上相关的逻辑都会生成出来,用户在做后续的业务代码编写中应注意不要删除相关的代码。此外在自定义API中如涉及以上场景,用户需要手动添加相关校验逻辑。