通用权限管理模型

简介: 本文介绍ACL与RBAC两大核心权限模型。ACL通过用户/角色直接授权,简单直观;RBAC则基于角色分配权限,支持角色继承、职责分离等机制,更适用于复杂系统。了解模型结构有助于构建清晰的权限体系。

笔者的学习认知中,对于一个新框架往往都会先去学习一下底层模型(即表结构及关系),因此这里我们就来了解一下通用的权限管理有哪些,各自的模型关系大概是什么样子,好对我们接下来的学习有个全局认知。
除了本节讲解的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​

相关文章
|
8月前
|
jenkins 持续交付 调度
项目《神领物流》
本项目为自研物流系统,基于微服务架构实现智能调度与管控,涵盖用户、快递员、司机多端应用。采用GitFlow管理代码,通过Jenkins实现持续集成,提交后自动构建,保障开发效率与系统稳定,类似顺丰速运模式,面向C端提供高效快递服务。(239字)
|
8月前
|
设计模式 Java 程序员
推荐书籍
推荐多本Java经典书籍:《Head First Java》适合入门,《Java核心技术》深入巩固基础,《Java编程思想》整合设计模式,适合进阶。并发方面有《Java并发编程之美》等,JVM推荐《深入理解Java虚拟机》与《实战JVM》。体系全面,适合不同阶段学习。
|
8月前
|
负载均衡 算法 Java
微服务篇
SpringBoot核心原理是自动装配,通过@SpringBootApplication注解实现配置类、组件扫描与自动配置。其启动流程包括环境初始化、上下文创建与自动化配置。常用起步依赖如web、redis等;支持properties、YAML等配置文件,后加载的覆盖先加载的。项目通过Feign、Ribbon实现服务通信与负载均衡,使用Nacos做注册与配置中心,Sentinel或Hystrix实现限流熔断,Gateway实现网关限流与CORS跨域控制,结合Spring Cloud五大组件构建微服务架构。
|
8月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过注解与YAML配置实现业务逻辑与代码解耦。结合实体别名、接口规则定义及脚本化表达式,实现动态计算与判断,如用户年龄判断、BMI计算等。支持AST语法树解析与上下文绑定,提供灵活的二次扩展能力,适用于复杂业务场景的延迟执行与缓存优化。
|
前端开发
CSS选择器详解与应用实例
CSS选择器详解与应用实例
555 44
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
546 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
|
机器学习/深度学习 数据采集 自然语言处理
迁移学习的基本概念与应用
迁移学习是一种机器学习技术,旨在将从一个领域中学到的知识应用到另一个相关领域中,以解决目标任务的训练数据不足和模型训练时间过长的问题。它在计算机视觉、自然语言处理等领域中得到了广泛应用。
697 2
|
设计模式 安全 Java
JAVA中的switch语句
JAVA中的switch语句
678 1
|
前端开发 JavaScript

热门文章

最新文章