SpringSecurity通用权限管理模型

简介: 本文介绍ACL、RBAC等常见权限模型。ACL基于对象授权,简单直接;RBAC则通过“用户-角色-权限-资源”模式实现灵活控制,具备最小权限、职责分离、数据抽象三大原则,并衍生出含角色继承与约束的RBAC0-RBAC3系列,助你构建系统化权限认知。(238字)

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

相关文章
|
11月前
|
缓存 安全 Java
Spring Security通用权限管理模型解析
Spring Security作为Spring生态的核心安全框架,结合RBAC与ACL权限模型,基于IoC与AOP构建灵活、可扩展的企业级权限控制体系,涵盖认证、授权流程及数据库设计、性能优化等实现策略。
798 0
|
人工智能 安全 Java
spring boot 权限管理的几种方式
Spring Boot 提供多种权限管理方式,包括基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)和基于访问控制列表(ACL)。RBAC 通过角色简化权限管理;ABAC 根据用户、资源和环境属性实现细粒度控制;ACL 则为每个资源定义访问控制列表。文中以 Spring Security 为例,详细展示了每种方法的配置与实现步骤,帮助开发者根据项目需求选择合适的权限管理方案。示例涵盖依赖添加、类配置及注解使用等关键环节。
2448 0
|
6月前
|
人工智能 运维 Prometheus
OpenClaw部署实操+智能家居+家庭服务器:打造无界自主家庭AI Agent助理
在智能家居与自托管服务器的普及浪潮中,传统智能家居平台的封闭性、家庭服务器运维的繁琐性逐渐成为体验瓶颈——小米米家等平台的智能场景被固化,家庭服务器群(Home Lab)的故障排查需要人工手动操作,二者始终无法实现真正的智能化协同。而OpenClaw(原Clawdbot)的出现,打破了这一僵局:通过将Home Lab环境知识、Prometheus监控系统、Home Assistant智能家居控制接口封装为标准化Skills,让AI Agent成为家庭的“智能管理员”,实现服务器故障自动排查、运维操作智能家居可视化、全网信息智能语音播报等功能,彻底摆脱传统平台的限制。本文将从实际应用场景出发,拆
3946 18
|
人工智能 JavaScript 开发者
解决 AI 落地“最后一公里”:如何优雅地将 Gemini 深度内容无损转为 Word 文档?
本文探讨如何将Gemini生成的Markdown内容无损转换为Word文档,破解公式乱码、图表失效、格式错乱三大难题。对比Google Docs原生导出、Pandoc命令行工具与在线方案,从易用性、公式支持、图表渲染等维度评测,助你高效产出可编辑、高保真的专业文档,实现AI写作到办公交付的无缝衔接。
4244 0
解决 AI 落地“最后一公里”:如何优雅地将 Gemini 深度内容无损转为 Word 文档?
|
人工智能 API 数据库
Cognita:小白也能搭建 RAG 系统,提供交互界面的开源模块化 RAG 框架,支持多种文档检索技术
Cognita 是一个面向生产环境的开源模块化 RAG 框架,支持本地部署、无代码 UI 和增量索引,帮助开发者轻松构建和扩展生产级应用。
1020 11
Cognita:小白也能搭建 RAG 系统,提供交互界面的开源模块化 RAG 框架,支持多种文档检索技术
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
1637 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
监控 Java 数据库连接
解决Spring Boot中的数据库连接池问题
解决Spring Boot中的数据库连接池问题
|
资源调度 前端开发 JavaScript
安利一款基于canvas/svg的富文本编辑器-支持在线导出PDF、DOCX
高性能:利用Canvas和SVG进行图形和矢量图形的渲染,提供高性能的绘图能力。 可扩展性:Canvas-Editor是一个开源项目,支持通过插件机制扩展编辑器的功能,如DOCX、PDF导出、表格分页等。 丰富的文本编辑功能:支持多种文本编辑操作,如插入表格、分页、性能优化等。
2160 0
|
机器学习/深度学习 存储 SQL
一文彻底搞定 RAG、知识库、 Llama-3
Llama-3 用于 RAG,增强大语言模型的性能,整合外部知识。关键组件包括:1) 自定义知识库,存储更新的信息;2) 分块处理,拆解文本便于管理;3) 嵌入模型,转化多模态数据为数值向量;4) 向量数据库,快速检索相似性;5) 用户聊天界面,交互平台;6) 查询引擎,获取上下文生成响应;7) 提示词模板,结合查询与知识生成提示。整个流程确保了 RAG 系统的有效性和响应能力。本文为转载,来自:https://mp.weixin.qq.com/s/Xue-9FKMMVKBSzIZC3JJdA

热门文章

最新文章