权限控制设计是中后台的基础能力,用于管控操作人员在平台内可做的事项。即通过权限控制,可以决定哪些人在平台内可以做哪些事。
为什么要做权限设计?
-
可以让管理者基于安全规则和策略,配置不同用户合理访问对应资源;
-
可以让用户能够在有效的限制范围内访问被授权的资源。
在B端场景中,通过权限控制可以让工作群组内不同的角色专注于自己的工作范围,可以降低操作风险发生概率,便于进一步管理。
权限控制的应用场景
权限控制的应用主要有两种场景:
版本管理场景
基于版本进行产品权限的分配和控制,该场景主要应用于有商业化诉求的产品。
通过权限控制将产品功能切割为普通权限功能和高级权限功能,从而衍生出普通版和高级版,甚至更多版本的产品。
这些版本功能范围基本处于一个包含关系,例如企业版、标准版的功能权限。
权限管理场景
基于角色或属性规则进行产品权限的分配和控制,该场景适用于逻辑复杂模块繁多需要提升工作效率的B端产品。
通常一个角色对应一组静态权限,而一个用户可能有多个角色,如下图“分析师”角色便对应了一组数据权限。
在我们产品后台系统的设计中,最常见的应用场景为“权限管理”,权限管理涉及的维度也会比版本管理更为复杂。
如何设计权限控制?
1.首先了解一下权限技术模型
权限控制的实现依赖于技术实现,而常见的技术模型主要分成如下3类:
- 【ACL】Access Control Lists 访问控制列表
- 【RBAC】Role-based Access Control 基于角色的权限访问模型
- 【ABAC】Attribute-Based Access Control 基于属性的权限访问模型
不同体量的权限系统,我们可以参考不同的权限模型进行梳理和设计。
其中较为有趣的为RBAC模型,下面我将对该模型进行展述
RBAC其实是一种分析模型,主要分为:基本模型RBAC0、角色分层模型RBAC1、角色限制模型RBAC2和统一模型RBAC3。RBAC0是RBAC权限模型的核心思想,RBAC1、RBAC2、RBAC3都是在RBAC0上进行扩展的。RBAC0是由四部分构成:用户、角色、会话、许可。用户和角色的含义很简单,通过字面意思即可明白,会话:指用户被赋予角色的过程,称之为会话或者是说激活角色;许可: 就是角色拥有的权限(操作和和被控制的对象),简单的说就是用户可使用的功能或者可查看的数据。
用户与角色是多对多的关系,用户与会话是一对一的关系,会话与角色是一对多的关系,角色与许可是多对多的关系。
简单的理解其理念就是将“角色”这个概念赋予用户,在系统中用户与权限之间通过角色进行关联,以这样的方法来实现灵活配置。
其中RBAC1模型是在RBAC模型基础上,引入了角色分层的概念,即角色具有上下级的关系,每个等级对应不同的权限组,从而实现更细粒度的权限管理。
而RBAC2模型是在RBAC模型基础上,增加对角色的限制约束。主要包括以下约束:
-
互斥角色:同一个用户在两个互斥角色中只能选择一个(也会存在一个用户拥有多个角色情况,但是需要通过切换用户角色来实现对不同业务操作)
-
基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的
-
先决条件约束:用户想要获得高级角色,首先必须拥有低级角色
-
运行互斥:允许一个用户具有两个角色的资格,但在运行中不可同时激活这两个角色。
例如:iconfont和蓝湖的用户与角色就采用了约束的概念,超级管理员只允许只有一个
RBAC3是RBAC1与RBAC2的合集,所以RBAC3包含继承和约束。
在大致了解完模型后,我们基于业务来梳理出关键信息
1.选择权限模型
不同的业务特点指向不同的使用场景,因此我们需要基于业务特点选择合适的权限模型。
2.明确关键角色和属性
角色是连接用户和权限的桥梁,因此我们需要对平台内的B端管理角色进行穷举。 角色定义通常取决于岗位职能划分和任务流分工
3.梳理权限
权限是用户能够访问的资源,需将平台内所有权限点按照类型进行整理归类。权限点主要有以下几种类型需要盘点:
页面权限即用户在平台内可见的页面,由导航菜单来控制,包括一级导航菜单、二级导航菜单,甚至三级导航菜单,只要用户有对应导航菜单的权限即可访问页面;操作权限即页面内的功能按钮,包括我们常规认知的增删改查操作;数据权限即用户在同一页面看到的数据,不同数据权限的用户在同一页面内将看到截然不同的数据。
权限设置是B端项目必不可少的模块,只要理清楚实际的业务需求,合理运用RBAC权限设置的原理,其实也可以轻松完成,关于权限设计的分享就简单分享到这里了,下篇文章再见。