三个模块,搭建后台用户角色权限管理系统

11 评论 129287 浏览 401 收藏 15 分钟

一个后台的用户角色权限系统总是可以大概划分为三个打的模块的:用户管理、角色管理、权限管理。本文作者将就此三个模块展开叙述,enjoy~

一. 用户角色权限系统说明

1. RBAC权限设计模型

(1)RBAC

(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联,从而获得某些功能的使用权限。权限被赋予给角色,而不是用户,但是一个用户可以拥有若干个角色,当一个角色被赋予给某一个用户时,此用户就拥有了该角色所包含的功能权限。简单地说,一个用户拥有若干角色,每一个角色拥有若干功能权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。如下图:

2. 三大模块搭建后台用户角色权限系统

如上所述,一个后台的用户角色权限系统总是可以大概划分为三个打的模块的:用户管理、角色管理、权限管理。用户管理往往随着行政部门划分或者随着业务线部门划分,对应部门或者小组内的用户有着基本相似的功能需求和权限等级;角色管理相对来讲更加固定,它往往是基于业务管理需求而预先在系统中设定好的角色标签,一般不会随意更改,更像是一个用户分组标签;权限管理内容相对更加庞杂和丰富,主要包含了目标、操作和许可权三个部分,当某一功能权限授权给用户时,也就相当于为该用户开通了可以操作某个目标功能的许可权。

角色权限系统属于策略设计的范畴,它的设计非常考验一个PM对业务的理解力以及对自己后台所有功能的熟悉程度。做角色权限系统之前一定要先深度了解业务流程以及后台的所有功能模块,在不了解的情况下,多向相关同事请教,避免角色权限系统设计过程中出差错和逻辑漏洞。

二. 用户角色权限系统建设的三大模块

1.  用户管理

用户管理中的用户主要是功能系统的使用者,这些用户是一个一个的员工个体,这些个体往往从两个维度来进行划分:行政关系(部门架构)、业务部门(业务架构)。用户管理就是在此两个维度来给员工个体进行关联性的初步分群或者分组。按照行政部门或者按照业务线部门划分后,对应部门或者小组内的用户有着基本相似的系统功能使用需求和权限等级;

注:上图例为按照行政关系划分的用户管理模式

注:上图例为按照业务线关系划分的用户管理模式

2. 角色管理

(1)角色管理

角色往往是基于业务管理需求而预先在系统中设定好的固定标签,每个角色对应明确的系统权限,其所拥有的系统权限一般不会随意更改,并且角色也不会随着用户的被添加和被移除而进行改变,相较于用户管理而言更加稳定;

(2)自动赋权:用户自动进入角色

如果角色与行政关系下的组织部门存在绑定关系,那么如果一个用户进入到该组织部门后,该用户会自动被加入到对应的角色中,并且拥有该角色所有的系统权限。如一个财务人员【小张】入职财务部后,那么该用户无需进行额外的授权即可在对应财务报表系统查看该部门员工可查看的财务数据报表和对应的操作权限(比如操作财务审批等);

(3)角色赋权:用户被添加进角色

业务是不断创新和发展的,随着业务的发展,会有越来越多的新的角色被设置和创建,比如公司新启动了一个企业团餐项目,项目部横向的从各个部门找了多个员工组建项目团队,并且该项目的业务权限也只是授权给这批员工可查看和操作,那么,在此项目中,会产生一个新的角色 “ 财务1 ”,系统高级管理员会把从财务部门选中的财务【小张】添加到“ 财务1 ”这个角色中,那么【小张】即可获得查看企业团餐项目业务数据报表和操作的权限。这种权限的授予无法通过用户行政关系的自动绑定来实现;

(4)角色继承:角色权限的继承

权限可以是独有的,也可以是继承的。每个角色都有自己的权限集,角色继承其实也就是继承父系角色的权限,一般角色在继承其父系角色的全部权限的基础上增加拥有一些自己的权限。而系统角色继承往往存在于用户分级管理比较明确的团队或者公司;

(5)角色互斥:角色包含的权限互斥

角色互斥的业务背景:当一个业务流程由于风控的原因,需要将其操作给划分成分开的几个步骤时,需要给这几个不同的步骤授权不同的角色,并且这些角色之间需要进行互斥。比如大额财务报销审批流程,财务人员【小张】拥有了审批人权限后,就无法将审核确认的权限再授予小张,以此来规避一个人完成大额报销而带来的财务风险;

(6)临时角色

临时角色往往是针对特殊群体设置的,比如公司有特殊访问团队莅临,需要给这些特殊的客户一些临时身份来体验某些功能操作。那么把这些人添加到部门的组织架构中显然是不合适的,因为这些人只是临时的摆放者,不是企业员工;其次,这些客户需要体验的功能操作往往是横跨多个业务模块和产品线的(比较繁杂),一般公司并没有现成的固定角色符合拥有客户所需的全部操作权限,因此需要给这些客户开设临时角色,并且支持给临时角色最大的权限选择空间;

(7)黑白名单

3. 权限管理

(1)权限管理

权限管理更多是从功能菜单、功能操作、数据参数三个不同颗粒度等级来考量的。具体颗粒度的大小视公司结构和团队规模而定,如果不是业务属性一定要求将权限控制到非常精细的级别,其实就没有必要将权限的颗粒度拆分到具体某一项操作或者某一个按钮,毕竟后台产品的核心是业务管理平台,主要目标是辅助业务的管理和推进。

注:如图为某一后台产品的部分截图,其中可见功能菜单页、功能操作按钮和数据字段。

(2)功能菜单权限

对于后台产品来讲,针对功能菜单来划分用户权限其实是比较粗颗粒度的一种管理方式,这种模式下用户一旦获得授权即可使用该菜单栏下的全部数据查看权限和功能操作权限;

(3)功能操作权限

功能操作层级的权限相对于功能菜单会更为深入,这种情况下,不同角色的用户可以进入同一菜单页后台查看相同的数据字段信息,但是他们可执行的功能操作不同;

(4)数据字段权限

数据字段层面是较细颗粒度的拆分,他会实现不同角色用户在进入同一菜单页后台时,可见的数据字段都有差异。比如销售人员进入某销售业绩管理后台时,可以看到自己的业绩提升数据,但是财务人员看到的是业务工单的费用字段,这些字段共存在一个菜单页中,只是受限于不同的角色权限而已。

三. 案例分析

1. 促销活动权限系统权限对接

以某一促销活动的后台从无权限限制到接入用户角色权限管理系统为例,详情如下:

注:以上为某产品的促销活动管理后台截图

2. 促销活动后台接入权限系统前

在促销活动后台接入权限系统之前,几乎全部的系统权限都处于裸奔的状态,所有人业务线成员都可以查看该后台的运营活动内容和运营结果数据,并且可以执行相对敏感的操作。这种情况显然是存在一定的管理风险的,因此该后台系统需要对接权限管理系统进行系统化管理和风险控制;

3. 促销活动后台接入权限系统时

促销活动在接入权限管理系统过程中,需要拆解该功能模块的权限元素(到一定颗粒度),因此需要根据业务特征来判断需要拆分的颗粒度,是到功能菜单、功能操作还是数据字段的级别,明确拆分颗粒度之后,权限管理系统才可以给不同角色按照颗粒度授予权限;

4. 促销活动后台接入权限系统后

促销活动在接入权限管理系统过程后,当对应角色的用户再次登录这个后台时,首先后台会校验该用户的角色是否拥有该功能模块的权限,以及该角色权限对应的操作权限和数据字段权限,校验结果经服务端处理会在产品端展示给用户可见。这个时候,同一用户再该后台可见和可执行的操作与接入权限管理系统之前可能有很大的不同,这就是基于用户角色的权限管理系统带来的改变。

四. Q&A

1. 一个用户拥有多个角色,多角色之间如果存在互斥关系如何处理?

如果一个用户已经被添加到某一角色范围下,那么,当给该用户添加一个与当前角色存在权限互斥关系的角色时,系统会进行互斥性判断,后面的角色就无法给该用户添加成功;

2. 业务发展过程中,如何保证不同角色之间权限拆分清晰?

随着业务的快速发展,一定会不断新增不同的角色和更多的功能模块,而且这些角色和功能权限之间的关系也会日益混乱,这个时候需要产品经理和业务方一起,及时的面对业务的发展变化,及时、快速的梳理业务调整范围,作出对应的改变;

3. 用户权限管理系统核心难点是前期的产品设计吗?

用户权限管理系统核最难的不是前期的产品设计,而是后续的运营维护,因为权限系统的结构往往不会随意变更,但是随着业务发展快速出现的角色和功能模块,为了防止角色和功能权限之间的关系变得混乱,在建立新的角色和分配权限的时候需要思路清晰且慎重调整。

完结~

 

本文由 @阳明(刘同) & @云殊(张俊恒)原创发布于人人都是产品经理。未经许可,禁止转载

题图来自 unsplash,基于 CC0 协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 反复研读多遍

    来自广东 回复
  2. 很受用,原来对于角色桥梁的作用理解不深,本文中关于角色的自动赋权、角色继承、角色互斥的功能加深了我对角色的理解,对现有工作也有所启发。感谢分享。
    针对权限管理这块有没有更深入介绍的文章可以学习,求推荐

    来自福建 回复
  3. 请教下大佬类似下面问题如何设计:
    x公司销售部门,分a、b两组
    1.a组长可以查看、修改、审批a员工表单,
    2.a组成员可以查看b组表单
    3.b组长在a组长授权的情况下可以代为审批a组成员表单
    4.a组、b组成员只能查看管理a组,无法看到b组表单(这种同部门的销售订单用的相同页面)

    回复
    1. 不是大佬,简单说下
      1、补充一下前提信息,
      1.1先统一名词,a/b员工表单,a/b组成员表单,a/b组皆统一为a/b成员表
      1.2假设a组长只能管(增删改查)a成员表
      1.3假设b组成员只能看a成员表,看不到b成员表(1、4矛盾,1说a可以看,4又说可以管理,暂定为成员只有看的权限)
      1.4a员工,和a组长的可视范围一致(能看的信息一样)
      1.5员工表单,通常指的是展示员工信息的表,而审批的单,通常指的是一些工单的表,和员工信息表不同,暂时定为在员工信息上有个和修改类似的审批操作
      1.6假设b组长对b成员表也有查看、修改、审批权限
      2、入正题
      2.1建立一个成员表,记录员工信息,包含两个字段{所在组}和{职务}
      2.2当发生操作行为时,比较动作【发起者】和【接受者】的信息
      2.3所在组为a的【接受者】信息可被所有人查看
      2.4所在组一致,且【发起者】职务为组长
      则可进行增删改查
      2.5所在组为b,且职务为组长的【发起者】,可对所在组为a,且已被a组长授权的【接受者】信息进行审批。
      2.5.1至于这个a组长授权又有多种情况:
      2.5.1.1如a组长提前授权了一批员工,此时b组长才能看到对其审批的功能,不然就只能看不能审批
      2.5.1.2又或者b组长一直都能看到审批功能,但是他点了之后,需要经过a组长授权(二次确认)
      信息不全,先说到这,有兴趣(或者工作机会)可以加微信(用比较多),同号QQ:493412629联系一下●v●

      来自广东 回复
    2. 第1.3点说错了,矛盾的不是1、4,是2、4.。。。

      来自广东 回复
    3. 好久没登录这个网站,回答了这么多,感谢!

      来自安徽 回复
  4. 角色创建和编辑操作权限、数据权限是灵活的,但是有些功能需要把角色写进代码,怎么处理这种事件?
    比如我把角色1写进代码,角色1有某些操作和数据权限,但是在后台编辑角色时又重新编辑了,导致功能实现层面发生了变化。

    来自上海 回复
  5. 02功能操作权限和03功能操作权限许可,有什么区别?需要分拆分出来?原因: 在赋予角色操作某某的权限时,同时也就被许可了。

    来自四川 回复
  6. 在这种模型中,用户与角色之间,角色与权限之间,一般者是“多对多”的关系 这里应该是 “一对多” 关系;

    来自广东 回复
    1. 一个用户有多个角色;一个角色赋予多个用户。 权限就不说了,更是了。。。。

      来自四川 回复
  7. 这不是基于资源的RBAC系统吗?

    来自浙江 回复