2.通用权限管理模型

简介: 本文介绍了ACL和RBAC两种常见的权限模型。ACL通过直接为用户或角色授权实现访问控制,简单直观;RBAC则基于角色进行权限管理,支持角色继承与职责分离,结构更清晰、易于维护,是现代系统主流的权限设计方式。

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

除了本节讲解的ACL、RBAC,还有一些的DAC、MAC、ABAC,感兴趣的读者们可以自行了解一下。

ACL权限模型

ACL(Access Control List)访问控制列表,是很古老的一个权限控制模型。核心思路:将某个对象的某种权限授予某个用户或某种角色,他们之间的关系是多对多,即一个用户/角色可以具备某个对象的多种权限,某个对象的权限也可以被多个用户/角色所持有。

ACL使用非常简单,在搞明白原理之后,开发者可以不用任何权限框架就可以快速实现ACL权限模式。当然Spring Security也为ACL提供了相应的依赖:spring-security-acl,如果项目有使用可以直接添加此依赖。

RBAC权限模型

RBAC(Role-based access control)基于角色的访问控制,是一种较新且广为使用的权限控制机制,这种机制不是直接给用户赋予权限,而是将权限赋予角色。(看到这读者们是不是觉得跟ACL有相似之处呢)

RBAC将用户按角色进行归类,通过用户的角色来确定用户对某项资源是否具备操作权限。RBAC简化了用户与权限的管理,它将用户与角色关联、角色与权限关联、权限与资源关联,这种模式使得用户的授权管理变得非常简单和易于维护。RBAC权限模型有三个主要原则:

(1)最小权限:给角色配置的权限是其完成任务所需要的最小权限集合

(2)职责分离:通过相互独立互斥的角色来共同完成任务,即不能一个角色有重复功能,有这种场景就给一个用户赋予多个角色

(3)数据抽象:通过权限的抽象来体现

RBAC权限模型分类

RBAC0

在RBAC0中,一个用户可以具备多个角色,一个角色可以具备多个权限。如下图

RBAC1

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

RBAC2

RBAC2也是在RBAC0的技术基础之上建立的,引入了静态职责分离和动态职责分离。

角色互斥:在实际项目中有一些角色是互斥的,如财务就不能自己报账自己审批,对于这个角色一般不能和其他角色见人。通过职责分离可以解决这一问题。

静态职责分离:在权限配置阶段就做限制。如同一个用户不能被授予互斥的角色,授予时做互斥判断。

动态职责分离:运行阶段进行限制。如一个用户即使有多个角色,代码也会实时判断其真正有效的角色是几个。

RBAC3

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

相关文章
|
存储 人工智能 运维
别再靠脚本“救火”了!让智能数据治理接管你的运维世界
别再靠脚本“救火”了!让智能数据治理接管你的运维世界
537 14
|
8月前
|
人工智能 自然语言处理 运维
企业做数据治理要多少钱?(2026年3月)
2026年,数据治理已成企业合规生存与资产增值的战略刚需。本文解析真实成本结构(显性+隐性),按企业规模分层给出预算参考(中小10万起,中大型50–200万),并重点推荐瓴羊Dataphin:AI增强、工程化封装、灵活部署,助企业控本增效、量化ROI。(239字)
|
11月前
|
开发者
业务架构图
本文介绍了业务架构图的核心概念与绘制方法,涵盖业务定义、架构域分类、分层分模块分功能的要义,并结合实例说明其在产品设计中的应用价值。
|
11月前
|
安全 Java 开发工具
1.工程搭建与验证
本文介绍如何使用阿里云脚手架快速搭建Spring Boot工程,并整合Spring Security。内容涵盖项目创建、代码导入、Web依赖配置及安全验证,通过默认登录机制演示权限控制,附完整代码仓库地址。
 1.工程搭建与验证
|
11月前
|
存储 缓存 负载均衡
Nacos注册中心
本文详细介绍Nacos的安装部署、服务注册与发现、负载均衡策略、权重控制、环境隔离及实例类型等核心功能,涵盖从本地搭建到生产实践的完整流程,帮助开发者掌握其在微服务架构中的应用。
 Nacos注册中心
|
11月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战应用,涵盖配置管理、热更新、共享配置及优先级规则,并演示集群搭建与高可用部署,提升微服务架构下配置的动态管理能力。
|
11月前
|
存储 消息中间件 开发框架
应用架构图
技术架构是将业务需求转化为技术实现的关键过程,涵盖分层设计、技术选型与系统间调用关系。本文详解单体与分布式架构,包括展现层、业务层、数据层及基础层的职责,并阐述应用内外部调用关系与边界划分,构建清晰的技术蓝图。
|
11月前
|
Dubbo IDE API
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程搭建全过程,涵盖项目创建、模块配置、数据库导入及服务远程调用实现。通过两种方案快速部署工程,使用RestTemplate完成服务间HTTP通信,帮助开发者掌握微服务基础架构与调用机制。
|
11月前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间,展现动态协作过程。它强调交互的时间次序,可用于建模并发进程与方法调用,核心元素包括角色、对象、生命线、控制焦点和各类消息,是分析系统行为的重要工具。
|
11月前
|
Java Shell 测试技术
Jmeter快速入门
本教程介绍JMeter的安装与快速入门。需先安装JDK并配置环境变量,下载JMeter后解压,通过bin目录下的脚本启动。支持设置中文界面,并演示了如何创建线程组、添加HTTP取样器及监听器,用于性能测试的基本操作。