后台基于RBAC模型的用户与权限设计

一项目背景

1.1需求来源

前段时间,笔者所在公司收到了多个客户对后台权限和角色的需求。讨论发现,现有的产品后台架构并不能很好的满足用户需求,所以为了满足这些客户的需求并为之后可能存在的业务拓展打下基础,我们决定对现有产品的后台用户体系进行迭代。

1.2需求的拆解

通过过滤需求,我们发现其实用户的需求主要是两类,

1. 要求我们的用户体系可以承载用户多级分销的业务模式并满足各级分销之间数据权限的要求,

2. 要求我们完善对用户权限的控制。   

二理论依据

涉及到后台用户管理系统,绕不开的概念就是权限,任何一个账号都会有自己的用例。但是多数情况下,我们对部分账号的用例会做一些限制,如果直接将这种限制加在账号上,就会产生二个问题:

[if !supportLists]l [endif]每个账号都要配置很麻烦;

[if !supportLists]l [endif]无法批量修改一类用户的权限。


所以角色的诞生就呼之欲出了,我们通过对权限集的抽象,创立了角色,通过修改角色,来达到控制拥有该角色的账号的权限修改的目的。


权限可以分为数据权限和功能权限两大类:

[if !supportLists]l [endif]数据权限顾名思义,就是账号能查看多少数据,如何实现A部门与B部门之间相互不能查看业务数据,这个就涉及到数据权限;

[if !supportLists]l [endif]功能权限按照范围以大致菜单权限和按钮权限,按照操作可以大致分为查看和编辑权限。

2.1 RBAC-0模型

2.1.1简述

RBAC-0模型的特点就是用户和角色是多对多的关系,同一个用户拥有多个角色的属性,我们通过组织这个概念来构建组织架构,从而实现对角色数据权限的分配。这样单个用户账号拥有的全部权限就是他所在组织的权限的累加。


2.1.2举例

在RBAC-0模型中,A用户负责X组织的业务,B用户负责Y组织的财务工作。正常情况下,A和B自然不能查看对方的数据,但是如果有天,B由于业务需要需要协助处理X组织的财务,那我们就可以通过为B用户添加X组织的“财务”角色来实现这种需求。在业务结束后,也可以通过暂停/删除操作来管理B在X组织下的权限。


2.2 RBAC-1模型

基于RBAC-0模型,针对角色引人继承的概念,子角色可以对父角色的权限进行继承,但是子角色的权限一定小于父角色。

2.3 RBAC-2模型

相较RBAC-0系统,RBAC-2系统在用户与角色间和角色与角色之间加入了一些规则。

[if !supportLists]l [endif]单个角色允许分配的用户数限制,例如一个公司不可能有多无限个“董事会”角色;

[if !supportLists]l [endif]单个用户允许授予的角色数限制,例如单个用户不允许在一个公组织或多个组织担任无限多个职务;

[if !supportLists]l [endif]角色与角色有层级关系,例如想新增一个部门经理,不能用一个部门职员的账号去创建吧?

[if !supportLists]l [endif]角色与角色存在互斥关系,这个根据实际业务需要来做限制,例如销售不能兼任会计。

2.4 RBAC-3模型

RBAC-3模型也叫统一模型,它基于了RBAC-0,并包含了RBAC-1和RBAC-2模型的全部特点,

三设计过程

3.1 新增账号的属性


新增账号是用户体系的最基本的功能,新增账号时需要获取账号的哪些参数决定了整个用户体系的数据维度。



这里不得不提的就是USER_ID,登录账号,昵称的概念。

USER_ID:对应的是账号在系统中唯一标识,可以不展示给用户,例如微信的open_id和union_id,一般在新增账号时由系统生成,且不可修改;

登陆账号:登录账号和USER_ID在有的系统并不一致,同一个USER_ID可能对应着多个登录账号,例如微信可以通过微信号,手机号,邮箱去登录,这里的不同登陆方式都对应这一个登陆账号,一般在新增账号时,由用户输入,且不可修改;

昵称:昵称是用户可以自由编辑操作的,由用户输入,且允许修改

3.2 功能权限的处理方式

功能权限通过对角色的权限树进行修改来实现。在权限树中我们可以将页面权限,菜单权限和按钮权限罗列,通过筛选对应权限完成对角色功能权限的控制。



需要注意的一个问题是,权限控制的最小粒度。如果要实现每一个权限的控制,相当于每一个权限对应功能都需要做封装。大的页面和菜单权限是必备的,但是哪些按钮权限是可以封装在一起的,(比如“启用”和“暂停”一般都是成对出现的),这些是需要产品考虑的。


3.3 数据权限的处理方式

数据权限其实是角色权限的重要属性,但是由于数据范围太灵活,如果在角色加入“数据权限”tab,如果账号下的数据量较大,用户编辑数据权限的操作会很繁琐。因此,因此现在主流的后台设计都会使用“组织结构”来对应数据权限。


在系统中,我们使用了【新增组织】的方式,来处理数据权限。

3.4对老用户的兼容

在做用户体系的重构时,老用户的账号兼容问题是产品必须考虑的部分。兼容问题也是从功能和数据两个维度去验证新的体系是否对老用户是否有影响。

四总结

文章的内容主要是本次迭代中实际的使用场景,抱着他山之石可以攻玉的想法,参考了现有的资料,结合自己系统的实际情况,对用户体系设计做了一次小结。若有不足之处,还请大家多多沟通,共同进步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容