通用权限管理模型

简介: 本文介绍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​

相关文章
|
3月前
|
存储 监控 固态存储
阿里云服务器配置选择参考:cpu与内存、带宽和云盘种类及容量选择注意事项参考
阿里云服务器配置选择参考:选择合适的阿里云服务器配置与云盘容量,用户需先明确业务需求,包括网站类型、访问量、应用类型、性能需求及数据安全性等。根据需求选CPU核心数、内存及带宽,如高并发场景需多核CPU与大内存。云盘容量上,系统盘建议20G-40G,数据盘依数据量选50G-100G或更大,并区分系统盘与数据盘用途。
|
5月前
|
设计模式 Java 程序员
推荐书籍
推荐多本Java经典书籍:《Head First Java》适合入门,《Java核心技术》深入巩固基础,《Java编程思想》整合设计模式,适合进阶。并发方面有《Java并发编程之美》等,JVM推荐《深入理解Java虚拟机》与《实战JVM》。体系全面,适合不同阶段学习。
|
5月前
|
负载均衡 算法 Java
微服务篇
SpringBoot核心原理是自动装配,通过@SpringBootApplication注解实现配置类、组件扫描与自动配置。其启动流程包括环境初始化、上下文创建与自动化配置。常用起步依赖如web、redis等;支持properties、YAML等配置文件,后加载的覆盖先加载的。项目通过Feign、Ribbon实现服务通信与负载均衡,使用Nacos做注册与配置中心,Sentinel或Hystrix实现限流熔断,Gateway实现网关限流与CORS跨域控制,结合Spring Cloud五大组件构建微服务架构。
|
5月前
|
缓存 开发工具 git
QLExpress使用及源码分析
QLExpress是阿里开源的轻量级规则引擎,支持通过注解与YAML配置实现业务逻辑与代码解耦。结合实体别名、接口规则定义及脚本化表达式,实现动态计算与判断,如用户年龄判断、BMI计算等。支持AST语法树解析与上下文绑定,提供灵活的二次扩展能力,适用于复杂业务场景的延迟执行与缓存优化。
|
3月前
|
存储 人工智能 数据可视化
大模型应用:向量与元数据联动:解锁向量数据库复合查询的核心能力.30
本文深入解析向量数据库中“向量+元数据”复合查询技术:通过融合语义相似性与结构化过滤(如时间、标签、权限等),显著提升RAG等场景的检索精度、效率与业务适配性,并结合Chroma实战演示三种查询路径及多行业应用。
349 9
|
3月前
|
人工智能 自然语言处理 搜索推荐
大模型微调应用:解锁垂直场景的无限可能
大语言模型微调,是让通用AI精准适配垂直场景的关键技术:低成本、高效率、保通用、可定制。本文详解其在智能客服、内容创作、专业问答、代码生成等领域的落地实践与核心要点,助力企业将AI转化为真实生产力。(239字)
|
SQL 分布式计算 数据挖掘
从Excel到高级工具:数据分析进阶指南
从Excel到高级工具:数据分析进阶指南
525 54
|
5月前
|
人工智能 JSON 数据挖掘
大模型应用开发中MCP与Function Call的关系与区别
MCP与Function Call是大模型应用开发中的关键技术。前者为跨模型工具调用提供标准化协议,实现解耦与兼容;后者是模型调用外部功能的内置机制。二者互补,共同构建“意图解析-协议传输-工具执行”的分层架构,推动AI应用生态发展。
|
4月前
|
人工智能 监控 安全
从零到一搭建智慧工地平台:基于开源框架的快速定制开发与业务扩展实践
数字工地云平台融合物联网、AI、大数据与云计算,覆盖“人、机、料、法、环”全要素,提供人员/设备安全、视觉AI分析、扬尘监测、塔吊/升降机监控、深基坑预警等10+智能子系统,实现施工管理数字化、网络化、智慧化升级。
239 0