一、主题分享

后台的总结起来有两大类型:功能类、流程类。 在设计功能或流程前都需要预判不同的使用角色对应不同权限。今天是要说就是RBAC(Role-Based Access Control)基于角色的访问控制。

早期模型弊端:无法复用,无法批量套用,需要依次处理

20180611_191129

RBAC是一种分析模型,主要分为:基本模型RBAC0、角色分层模型RBAC1、角色限制模型RBAC2、统一模型RBAC3。
RBAC0,它是RBAC0的核心,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。RBAC0定义了能构成RBAC控制系统的最小的元素集合,RBAC0由四部分构成:

  1. 用户(User)
  2. 角色(Role)
  3. 会话(Session)
  4. 许可(Pemission)

举例:
如果我们做CRM产品,按传统权限模型,给每一个用户赋予权限则会非常麻烦。RBAC0抽象出几个角色,譬如采编经理、客服经理、市场经理等,然后权限分配给这些角色,再把角色赋予用户。这样无论是分配权限还是以后的修改权限,只需要修改用户和角色的关系,或角色和权限的关系即可.例如公司更换采编经理,只需每次为新来的采编经理配置采编经理角色即可。

20180611_191233

RBAC1,基于角色的分层模型。
RBAC1,它是RBAC角色的分层模型,RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念,简单理解就是,给角色可以分成几个等级,每个等级权限不同。
举例:适用于角色之间的层次明确,如采编经理与采编总经理,业务部门如总经理–采编经理–采编员。也适用于用户分级管理,初级用户只能使用部分功能,中级用户能够使用更多功能。

20180611_191300

RBAC3:RBAC1+RBAC2
RBAC1+RBAC2的集合体。支持角色间的继承关系,又支持角色间的责任分离关系。备注:暂时没有研究。

20180611_191323

RBAC2、是RBAC的约束模型

RBAC2是在RBAC0之上,仅仅对用户、角色和权限三者之间增加了一些限制。限制分为两种,即静态职责分离SSD和动态职责分离DSD。

RBAC延展-用户组
用户所属组,用于配置统一组同一部门用户。有了用户组,在新建角色时,可直接将角色赋予某个组,则进入此组的人员自动获得对应角色。
举例:当我们公司有财务部,销售部,运营部等部门,那么我们看把一个部门看作是一个用户组,直接给予这个部门角色,那么这个部门的所用用户就获得的相应的角色权限。

这些是我的分享,分享比较粗糙,还请大家见谅


二、Q&A

Q:有没有数据库示例ER?RBAC算是见过比较多了,从最开始十多年前OA就应用得很多,后来在ERP上也见过类似的设计?
A:有的,这个我跟DBA明天要下。
我们是遵循这个来的。

20180611_192415

我们没有实现RBAC3 太难了。
他这个图也只是理论,无法运用到实际的设计中。 问题在于一旦角色中出现继承、互斥的关系后,那么后面就引发了一堆逻辑的判断。
S:在多组织架构中还是比较复杂,表现层容易实现(就是菜单之类的),业务层粒度控制太细不好控制,特别是要考虑到系统本身是支持自定义属性,流程或者作为平台作为二次开发的时候

20180611_193432

A:除非业务需要,否则千万别搞这个。
S:这个是网上搜索的一个,大多一些管理型系统是类似设计
A:到时你跟客户去说集成、互斥、权限冲突等等。相当麻烦。继承。。
S: 20180611_193856

A:网上的设计文档都是概念,无法应用到实际的生产环境中。
S:这是一款开源的角色设计,控制到窗口、菜单,工作流,任务等等
A:我用的是Spring Security
S:嗯,互联网要轻多了,企业级要复杂些这块
A:是啊,我们这边产品 分业务型和平台型。 比如,我们好多逻辑新来的产品根本不懂,都是开发告诉他逻辑怎么走。
S:嗯,企业级软件复杂些,也看过很多直接配制的SQL,像电商这块,商户后台的权限管理(比如运营,财务,管理,等)要轻多了

20180611_194919

Q:你们这种要数据,操作全部分离吧?上级能给下级分配权限,上级总有同等权限,能查看所有下级数据?
A1:基于角色的权限我觉得设计和实现还好吧,基于数据的权限才是头疼的地方。
S:这种简单,权限做到操作级别,没有实现数据分离,最麻烦是数据权限。数据权限貌似只有建立职能部门流程图,然后拓展性还要好的,貌似不多。
A1:之前通过不同的视图实现过一次,但是感觉还是太麻烦了。
S:不能用识图,用职能角色架构来。
A1:视图实现简单,职能角色架构的例子有吗分享一下。
A2:以前我也设计过,完全是模仿ERP的

20180611_200553

这个是ORACLE的做法


本文档来自支付产品技术交流群的聊天记录整理,由志愿者整理并发布到本网站。如需要及时收到来自支付产品技术交流群的最新消息,请扫码关注“凤凰牌老熊”的微信公众号。 本群面向支付行业的有经验(2年以上)的产品经理、软件工程师、架构师等,提供交流平台。如想加入本群,请在本文评论中留言(不公开),说明所在的公司、负责的工作、入群分享的主题和时间。