《架构世界》2020微服务刊:微服务分布式事务实战
上QQ阅读APP看书,第一时间看更新

二、应用权限模型设计

首先,我们要了解一下,什么是权限。权限就是用户对某些资源的控制能力。所以,模型上我们就有了一个抽像的资源概念。

资源按类型具化,可能是用户在门户上可见的菜单,或者是页面上可见可点击的某些按钮,又或者是用户在应用后端可以调用的某个接口等。

用户通过角色,与这些资源建立了关联,我们才能在系统中通过用户找到这些资源,然后对它进行控制。

因此,用户,角色,资源的关系,就是一个用户可分配多个角色,一个角色,可以关联多个资源。如下图所示:

为了方便角色进行资源授权的管理,我们又提出了几个服务于它们的概念:角色模板,权限模板,资源组。

资源组,顾名思义,就是资源的分组。它是一个树状模型,目前主要设计使用了三层。顶层的代表着某一块的资源总集,比如某个子系统的资源总集。

权限模板,它通过关联多个顶层的资源组,可以代表着某个范围内的可授权资源总集。

角色模板关联着权限模板,从它的这个资源集合中挑出了一部分。

角色则是在创建的时候,复制角色模板的这些资源授权。它的资源授权可以修改,但可授权资源仍为权限模板代表的总集。

资源的授权如上图所示。顶层的资源组代表着某一块的资源总集,第二层则代表不同的资源类型,如菜单,功能,环境等。第三层代表着模块,比如机构管理模块的菜单。第三层的资源组之下,才关联具体的资源。对角色或者角色模板进行资源授权配置时,只需要找到对应的资源类型与模块,再找到相应的资源,点击是否勾选即可完成授权,非常地直观。

用户如何与资源关联?如下图,这里我们假设了一个示例。

某应用集成了coframe,其下又分了三个子系统。为了方便资源的管理,我们为每个子系统设置了一个顶层的资源组,然后为它配置了下层资源组与资源。然后,我们设置了两个权限模板,其中一个负责coframe与子系统一的资源,另一个则负责三个子系统的资源。基于两个权限模板,我们分别创建了角色一与角色二。三个用户中,用户一分配了角色一,用户二分配了角色一与二,用户三分配了角色二。用户一可分配coframe与子系统一中的资源,用户二可分配所有资源,用户三则只能分配三个子系统的资源。这样,资源的组合与隔离,会变得相当方便与直观。