Stream 项目 - 权限设计

学海无涯,心存高远。

需求

1、不同用户限制他能访问的页面、接口。

2、方便租户操作,需要初始一些角色。

3、根据租户订阅的订阅包决定初始的角色权限。

4、平台需要能够调整某一类型租户的权限。

粗略的看大体需要满足以上4个需求,在此之上还需要满足 saas 的隔离性。

设计

基础设计:

比如:产品菜单下面有“查看产品”、“新增产品”、“删除产品”等功能。其中“新增产品”功能有“新增产品”、“产品分类查询”接口权限。

permission1

角色设计

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

permission2

租户设计

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

permission3

订阅包设计

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

permission4

汇总

permission5

实现

对于平台方而言:

1、添加订阅包及订阅包的权限:当租户订阅某一个订阅包时,租户、所有者就相当于继承了订阅包的权限。

2、添加订阅包添加角色:当租户订阅某一订阅包时,会自动将订阅包下的角色初始化到租户角色中。

3、修改订阅包权限:改变订阅了该订阅包租户的权限。

对于租户而言

1、入驻时选择需要订阅的订阅包:初始化租户、所有者权限,初始化租户角色。

2、修改订阅包:重新初始化租户、所有者权限,但租户角色不再初始化。

3、退订:清除租户、所有者、用户权限。

对于用户而言

操作时校验该用户是否拥有权限。

资源控制

固定资源

除了菜单、接口之外,可能还需要对指定资源进行控制。比如:订阅包A、订阅包B都有邮件模版权限。但订阅包A只能访问基础的模版,订阅包B可以访问所有模版。

这里就需要引入资源的概念。所有对固定资源的限制都描述在订阅包下,一是初始化的时候不需要再同步到租户中;二是修改、退订时也不需要再去租户中移除。

动态资源

比如:订阅包A每个月只能发送1000封邮件,对1000封邮件来说就属于动态资源。动态资源是根据租户的使用情况变动的,所以需要维护到租户中。