SaaS多租户实现的思考
发布网友
发布时间:2023-02-18 14:08
我来回答
共1个回答
热心网友
时间:2023-09-22 13:17
最近在做SaaS权限设计的时候,一直在权衡着租户和组织的关系,以追求系统的简洁性。我们在做PaaS平台的时候,租户是有子租户的概念,而且是按照运营管理、客户域进行组织层级定义的。1,2级是对应的运营管理域,3,4级是对应的客户域。由于租户间是资源隔离的,对于租户间的资源访问问题,处理起来相当痛苦。
多租户SaaS系统怎么设计,下面是我总结的几点原则,供大家参考:
1、租户间是资源隔离的。相互无法访问对方的数据。
我们目前做到逻辑隔离,通过表里面增加租户ID的方式来实现多租户的支持。当然我们自然想做到物理隔离,相应的成本也会多很多。这块大家必须有租户间资源是隔离的概念。为了能更好的理解整个SaaS系统的设计初衷,我们可以认为租户间资源是物理隔离的。
2、组织也是一种资源,各租户都有自己的组织。
每个租户是有各自的资源信息的,这些资源是租户私有的。比如:角色信息、用户信息、组织信息等。
3、租户可以通过组织进行资源划分。
租户和组织这块有很多相近的地方,这块需要深刻的理解下。我个人是这么理解的:租户是对全部资源物理层面的隔离,而组织是对租户私有资源逻辑上的隔离。
4、租户不支持多层级,租户有不同的类型。
为了降低系统的复杂性,我们建议租户不支持多层级,只能建一级,租户是有类型的,通过类型区分不同的业务场景,租户间是平等的。
比如:XXX运营方也是独立的租户,与其它用户无本质区别。
5、通过组织的层级结构,来实现用户的数据权限。
这块也是我们做的最大改动:轻租户,重组织。发挥组织的天然业务隔离的特性,通过组织树来实现资源数据权限。
6、运营侧只管理到租户级别,不应该涉及到租户的私有资源。
组织是租户的私有资源,运营管理侧自然不应该去管理他,也不方便管理。
来张图,方便大家的理解:
为了方便,可以默认将租户的信息映射到组织上,做为组织的L0级。也可不映射,查询的时候自动加上。租户新建的时候,租户的默认管理员是挂在本账户下的,此时还没有组织的信息。