通用权限管理模型

简介: 本文介绍了ACL、RBAC等常见权限模型。ACL通过直接授权实现控制,简单直观;RBAC基于角色分配权限,更易管理。文中还详解RBAC0-RBAC3的演进,涵盖角色继承、职责分离等核心概念,帮助建立权限系统的全局认知。

笔者的学习认知中,对于一个新框架往往都会先去学习一下底层模型(即表结构及关系),因此这里我们就来了解一下通用的权限管理有哪些,各自的模型关系大概是什么样子,好对我们接下来的学习有个全局认知。
除了本节讲解的ACL、RBAC,还有一些的DAC、MAC、ABAC,感兴趣的读者们可以自行了解一下。
ACL权限模型
ACL(Access Control List)访问控制列表,是很古老的一个权限控制模型。核心思路:将某个对象的某种权限授予某个用户或某种角色,他们之间的关系是多对多,即一个用户/角色可以具备某个对象的多种权限,某个对象的权限也可以被多个用户/角色所持有。

用户表

权限表

角色表

直接给用户授权,1:N

角色跟权限绑定,1:N

给用户赋予角色,1:N

如油炸小波是普通用户

油炸大波是管理员

权限如:可删除数据、有excel导入权限等

ACL使用非常简单,在搞明白原理之后,开发者可以不用任何权限框架就可以快速实现ACL权限模式。当然Spring Security也为ACL提供了相应的依赖:spring-security-acl,如果项目有使用可以直接添加此依赖。
RBAC权限模型
RBAC(Role-based access control)基于角色的访问控制,是一种较新且广为使用的权限控制机制,这种机制不是直接给用户赋予权限,而是将权限赋予角色。(看到这读者们是不是觉得跟ACL有相似之处呢)
RBAC将用户按角色进行归类,通过用户的角色来确定用户对某项资源是否具备操作权限。RBAC简化了用户与权限的管理,它将用户与角色关联、角色与权限关联、权限与资源关联,这种模式使得用户的授权管理变得非常简单和易于维护。RBAC权限模型有三个主要原则:
(1)最小权限:给角色配置的权限是其完成任务所需要的最小权限集合
(2)职责分离:通过相互独立互斥的角色来共同完成任务,即不能一个角色有重复功能,有这种场景就给一个用户赋予多个角色
(3)数据抽象:通过权限的抽象来体现
RBAC权限模型分类
RBAC0
在RBAC0中,一个用户可以具备多个角色,一个角色可以具备多个权限。如下图

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

RBAC1
RBAC1是在RBAC0的技术基础之上建立的,主要是增加了角色的继承关系,让角色有了上下级。如下图

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

0:n

RBAC2
RBAC2也是在RBAC0的技术基础之上建立的,引入了静态职责分离和动态职责分离。
角色互斥:在实际项目中有一些角色是互斥的,如财务就不能自己报账自己审批,对于这个角色一般不能和其他角色见人。通过职责分离可以解决这一问题。
静态职责分离:在权限配置阶段就做限制。如同一个用户不能被授予互斥的角色,授予时做互斥判断。
动态职责分离:运行阶段进行限制。如一个用户即使有多个角色,代码也会实时判断其真正有效的角色是几个。

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

静态职责分离

动态职责分离

RBAC3
RBAC3是RBAC1和RBAC2的合体,如下图:

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

静态职责分离

动态职责分离

0:n


相关文章
|
5月前
|
数据库
向量数据库实战:从“看起来能用”到“真的能用”,中间隔着一堆坑
本文揭示向量数据库实战的七大关键陷阱:选型前需明确业务本质(模糊匹配 or 精确查询?);embedding 比数据库本身更重要,决定语义“世界观”;文档切分是核心工程,非辅助步骤;建库成功≠可用,TopK 准确率会随数据演进失效;“相似但不可用”是常态,必须引入 rerank;需建立可追溯的bad case排查路径;向量库是长期系统,非一次性组件。核心结论:难在“用对”,不在“用上”。
|
6月前
|
存储 弹性计算 安全
阿里云轻量应用服务器有哪些优势?为什么销量这么好?
阿里云轻量应用服务器专为新手和中小企业打造,2核2G配置、200M带宽不限流量,仅38元/年。操作简单,预装热门应用,一键部署,融合计算、存储、网络与安全,适合建站、开发测试、小程序等场景,可平滑升级至ECS,是高性价比上云首选。
阿里云轻量应用服务器有哪些优势?为什么销量这么好?
|
6月前
|
Java 数据库 开发者
Java 类加载与代码块执行顺序详解
本文详解Java中静态代码块、实例初始化块、构造器及局部代码块的执行顺序。通过示例分析,揭示类加载与对象创建时的生命周期机制,并总结“静→局→初→构”口诀,帮助开发者合理初始化资源,避免常见错误,提升代码健壮性与可读性。
|
6月前
|
Java
高效遍历 Map:优先使用 entrySet 或 JDK 8 的 forEach
在Java开发中,遍历Map时推荐使用`entrySet()`或JDK 8的`forEach()`,避免通过`keySet()`重复查找值。前者直接获取键值对,效率更高;后者结合Lambda,代码更简洁。根据场景选择合适方式,提升性能与可读性。
|
6月前
|
存储 安全
3.OAuth2.0四种授权模式
本文详解OAuth2授权码模式流程:A服务客户端通过B服务认证服务,经用户授权获取授权码,再换取访问令牌,从而安全调用B服务资源。该模式安全性高,广泛应用于第三方登录场景。
3.OAuth2.0四种授权模式
|
6月前
|
SQL 前端开发 测试技术
如何写好一篇技术方案(精简版)
一份好的技术方案是推动项目落地、对齐认知、降低协作成本的关键。应包含变更记录、背景、功能模块、流程图、接口设计等十大结构,遵循图文结合、聚焦可执行、简洁明了的原则,800–1500字为宜,重在指导行动而非堆砌文字。
|
6月前
|
SQL 监控 安全
生产环境发布管理:从开发到上线的全链路保障
本文详解大型互联网团队的四环境发布体系(DEV→TEST→PRE→PROD),阐述如何通过标准化流程与自动化平台实现安全、高效、可追溯的生产发布,涵盖环境职责、CI/CD核心能力及风险应对策略,助力团队实现快速迭代与零重大故障。
|
6月前
|
Java
ArrayList 的扩容机制解析
ArrayList扩容机制解析:添加元素时先检查容量,不足则触发扩容。默认初始容量为10,每次扩容1.5倍,通过数组拷贝实现,耗时O(n)。频繁扩容影响性能,建议预估容量并初始化指定大小,提升效率。
|
6月前
|
运维 监控 安全
为什么禁止使用 Executors 创建线程池?
Java并发中,`Executors`快捷方法易导致OOM或系统雪崩,因隐藏关键配置。阿里手册禁止其在生产使用。应显式创建`ThreadPoolExecutor`,设定核心参数与有界队列,结合Guava命名线程,提升系统稳定性与可维护性。
|
弹性计算 编解码 算法
央视、芒果TV、浙江、江苏,阿里云支持多家跨年晚会全球直播!
央视、芒果TV、浙江、江苏,阿里云支持多家跨年晚会全球直播!
314 2

热门文章

最新文章