背景
对于多租户系统,租户间资源是隔离的。组织属于租户的私有资源。但是我们业务上有个比较夸张的需求。新建的租户可以挂到具体的组织下面,这样导致整个关系比较混乱,很难理解。租户间的资源隔离原则也将被打破。业务上要求这样,所以还是需要解决的,那么在租户隔离原则基础上,我们该如何实现资源的分享呢?本问主要分为两方面进行阐述:租户间资源分享和租户内资源权限控制。
租户间资源分享
我们引入了资源授权的概念,来实现特点场景下的资源分享问题。比如:管理域的管理员想看到自己发展创建的租户信息(企业信息)。整个租户ER图如下:
增加用户授权表,将租户的资源信息授权给另一个租户,可具体到租户的组织或者用户。这样一来租户间隔离的第一原则不会被打破。一切都显得那么合理合规。租户和组织的关系也显得不那么混乱,比较容易被理解。
租户内资源权限控制
租户内的资源很多,主要包括两部分,一种是系统管理类的基础资源,比如:用户、组织、角色、权限等。另外就是业务资源,比如:产品、设备等。如何有效的管理这些资源,一般来说我们依托组织的作用,将资源进行合理的划分,比如:按行政区域、按分公司等。
总体设计原则
1、租户间资源隔离
2、通过授权达到租户间资源分享的功能
3、依托组织的层级,实现数据权限
创建组织树,将资源划分到各组织下,一般来说:上层组织的管理员,能管理其及及其以下的资源。如果想限制到管理的具体范围,可以通过配置来实现。这方面可以往授权概念上靠,与租户间的分享使用统一的授权模型。
4、通过授权实现组织间的分享
业务场景多种多样,对于有些资源,下级组织人员需要访问上级组织的资源。和租户间处理逻辑是一样的,我们还是通过授权的方式实现父级资源的分享功能。
5、引入全选、只选概念,以解决组织或者功能频繁变更问题
配合tree_path使用,这样能解决全选情况下,资源树变动后,授权别信息无法自动更新的问题。授权表中,资源存储的是资源的tree_path。
尾记
最近一直在看传习录,满脑子的糊涂,结合目前的社会现状完全无法理解。何为知行合一,何为致良知。大道至简,何为大道?
网友评论