学海无涯,心存高远。
需求
1、不同用户限制他能访问的页面、接口。
2、方便租户操作,需要初始一些角色。
3、根据租户订阅的订阅包决定初始的角色权限。
4、平台需要能够调整某一类型租户的权限。
粗略的看大体需要满足以上4个需求,在此之上还需要满足 saas 的隔离性。
设计
基础设计:
比如:产品菜单下面有“查看产品”、“新增产品”、“删除产品”等功能。其中“新增产品”功能有“新增产品”、“产品分类查询”接口权限。

角色设计
在基础设计之上我们需要将权限与人关联起来,所以引入了角色的概念。这也是权限设计中常用的做法。

租户设计
因为是 saas 系统所以我们还需要引入租户的概念。

订阅包设计
租户可以根据自己的需要购买不同的订阅包,不同的订阅包拥有的权限、初始化的角色都不同,所以我们需要引入订阅包的设计。

汇总

实现
对于平台方而言:
1、添加订阅包及订阅包的权限:当租户订阅某一个订阅包时,租户、所有者就相当于继承了订阅包的权限。
2、添加订阅包添加角色:当租户订阅某一订阅包时,会自动将订阅包下的角色初始化到租户角色中。
3、修改订阅包权限:改变订阅了该订阅包租户的权限。
对于租户而言
1、入驻时选择需要订阅的订阅包:初始化租户、所有者权限,初始化租户角色。
2、修改订阅包:重新初始化租户、所有者权限,但租户角色不再初始化。
3、退订:清除租户、所有者、用户权限。
对于用户而言
操作时校验该用户是否拥有权限。
资源控制
固定资源
除了菜单、接口之外,可能还需要对指定资源进行控制。比如:订阅包A、订阅包B都有邮件模版权限。但订阅包A只能访问基础的模版,订阅包B可以访问所有模版。
这里就需要引入资源的概念。所有对固定资源的限制都描述在订阅包下,一是初始化的时候不需要再同步到租户中;二是修改、退订时也不需要再去租户中移除。
动态资源
比如:订阅包A每个月只能发送1000封邮件,对1000封邮件来说就属于动态资源。动态资源是根据租户的使用情况变动的,所以需要维护到租户中。