通用权限管理模型

简介: 本文介绍了ACL、RBAC等常见权限管理模型。ACL通过用户/角色与权限直接关联,实现简单;RBAC则基于角色授权,解耦用户与权限,更易维护。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​

相关文章
|
机器学习/深度学习 小程序 前端开发
微信小程序——实现对话模式(调用大模型图片生成)
微信小程序——实现对话模式(调用大模型图片生成)
1371 3
|
9月前
|
并行计算 算法 计算机视觉
分数阶傅里叶变换(FRFT)的MATLAB实现
分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是傅里叶变换的广义形式,在时频分析、信号处理和光学等领域有广泛应用。
826 0
|
网络协议 数据安全/隐私保护 网络虚拟化
深入了解OSI模型:计算机网络的七大层次
OSI模型 OSI模型是一个网络通信的概念模型,用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次,每个层次负责不同的任务,使得网络通信的设计、开发和管理更加模块化和可维护。以下是OSI模型的七个层次以及它们的主要功能: 1、物理层(Physical Layer): 功能:处理物理传输介质上的原始比特流,确保数据在传输媒体上能够以适当的方式传输。 示例设备:集线器、中继器、网线等。 主要任务:比特编码、电压规范、物理拓扑等。 2、数据链路层(Data Link Layer): 功能:负责将原始比特流分割成帧并添加地址信息,以便在直接连接的设备之间传输数据。 示例设
5149 0
|
SQL 监控 数据可视化
RMS 分布式链路追踪产品揭秘
背景为了快速适应业务变化,聚焦业务迭代,各大厂商都进行了分布式架构的升级改造。特别是近几年,随着微服务与云原生的流行,分布式系统的规模愈发庞大,内部服务之间的调用也越来越复杂。然而,引入分布式架构的同时,也带来相应的稳定性问题。各项服务的开发人员、开发语言和部署节点等情况很可能各不相同,当分布式系统整体出现异常或者性能瓶颈的时候,依靠传统的指标监控和日志排查已经很难快速定位到出问题的地方。因此当下
2565 0
RMS 分布式链路追踪产品揭秘
|
存储 负载均衡 Java
SpringCloud框架
本文介绍了微服务架构中常用的技术组件与原理,包括Nacos与Eureka的服务注册与发现机制、Nacos的分级存储模型、OpenFeign的远程调用流程、Ribbon与Spring LoadBalancer的负载均衡策略、Hystrix与Sentinel的限流熔断机制、滑动窗口算法原理,以及Spring Cloud Gateway的路由断言与过滤器功能,全面覆盖微服务核心治理能力。
|
前端开发 数据安全/隐私保护
Uncaught (in promise) Error: Request failed with status code 404 at createError (createError.js:
Uncaught (in promise) Error: Request failed with status code 404 at createError (createError.js:
1705 2
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
存储 缓存 前端开发
灵魂拷问-前端的作用--性能优化篇
作者最近在尝试对负责的平台进行性能优化,本文整理了些前端性能优化的一些常见策略。
|
SQL 自然语言处理 安全
2024 年 8 月暨 ACL 2024 57篇代码大模型论文精选
2024年8月中旬,国际计算语言学大会ACL在泰国曼谷举行,展示了48篇代码大模型相关论文,包括24篇主会论文和24篇findings论文。主会论文涵盖XFT、WaveCoder、DolphCoder等创新方法,findings论文则探讨了代码注释增强、自动化程序修复等主题。此外,还额外整理了9篇8月最新代码大模型论文,涉及数据集合成、安全代码生成等多个前沿方向。欲了解更多,请访问我们的综述和GitHub项目。
2281 4
|
JavaScript 前端开发 Shell
实现在vue中自定义主题色彩切换
实现在vue中自定义主题色彩切换
605 0

热门文章

最新文章