2.通用权限管理模型

简介: 本文介绍了ACL和RBAC两大权限模型。ACL通过用户/角色与权限直接绑定实现控制,简单直观;RBAC则基于角色进行权限管理,解耦用户与权限,支持角色继承与职责分离,更适用于复杂系统。还简要提及DAC、MAC、ABAC等模型,帮助读者建立权限体系的全局认知。

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

相关文章
|
2月前
|
SQL 容灾 数据库
分布式事务Seata
本章学习分布式事务问题及解决方案,涵盖CAP、BASE理论,并深入讲解Seata框架的XA、AT、TCC、SAGA四种模式原理与实现,掌握跨服务事务一致性处理及高可用部署。
 分布式事务Seata
|
2月前
|
XML Java 数据库
SpringCloud工程部署启动
本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目创建、模块配置、数据库导入及服务远程调用实现。通过RestTemplate完成服务间HTTP通信,解决跨服务数据获取问题,并引导读者理解微服务拆分与调用关系,为后续深入学习奠定基础。(239字)
 SpringCloud工程部署启动
|
2月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata TC服务器的部署与微服务集成,包括下载、解压、配置修改、数据库表创建及启动步骤,并实现基于Nacos的高可用与异地容灾集群,提升分布式事务可靠性。
|
2月前
|
JSON Java Shell
Jmeter快速入门
本文介绍JMeter的安装与快速入门使用方法,包括环境依赖、下载解压、启动运行、中文界面设置及基本测试计划创建,涵盖线程组配置、HTTP请求添加、监听器使用等性能测试核心操作步骤。
 Jmeter快速入门
|
2月前
|
自然语言处理 Java Shell
安装ES、Kibana、IK
本文介绍了如何通过Docker部署单点Elasticsearch与Kibana,并配置IK分词器。内容涵盖网络创建、镜像加载、容器运行、DevTools使用,以及IK分词器的安装与扩展词典、停用词配置,助力中文文本分析。
 安装ES、Kibana、IK
|
2月前
|
安全 Java Spring
2.过滤器链加载原理
本文深入解析Spring Security过滤器加载机制,通过源码分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain的协作流程,揭示十五个过滤器如何自动装配并执行,帮助理解框架底层原理,为自定义认证页面奠定基础。
|
2月前
|
存储 缓存 Java
自动装配机制
本文深入解析SpringBoot核心注解@SpringBootApplication的源码实现,涵盖元注解(@Target、@Retention等)、组合注解原理及自动装配机制。重点剖析@ComponentScan、@SpringBootConfiguration与@EnableAutoConfiguration的作用,揭示@AutoConfigurationPackage和AutoConfigurationImportSelector如何通过spring.factories实现自动化配置,展现SpringBoot“约定优于配置”的设计思想。(239字)
|
2月前
|
JSON 安全 Java
6.鉴权
本文介绍基于客户端Token和JWT+Spring Security的认证方案,涵盖Token生成与校验流程、Redis存储、过滤器设计及RBAC权限控制实现,结合代码示例详解Spring Boot应用的安全防护机制。
|
2月前
|
XML Java Maven
3. 打包
本文介绍Java项目打包为可执行JAR文件的完整流程,包括配置文件设置、Maven打包步骤(如pom.xml配置)、运行与停止指令。支持前台/后台启动,以及通过端口查找PID并终止进程,同时提供依赖分离部署参考方案。
|
2月前
|
安全 数据库 数据安全/隐私保护
1.RememberMe简介及用法
RememberMe功能并非简单记住用户名密码,而是通过服务端生成令牌(Token)存于Cookie中,实现关闭浏览器后仍保持登录状态。勾选“记住我”后,系统在响应头设置remember-me令牌,后续请求自动携带该令牌验证身份。为提升安全性,可将Token持久化到数据库并增加二次校验机制,防止令牌泄露带来的安全风险。