通用权限管理模型

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

用户所具备的权限是用户所具备角色的权限合集

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

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

0:n

RBAC2RBAC2也是在RBAC0的技术基础之上建立的,引入了静态职责分离和动态职责分离。角色互斥:在实际项目中有一些角色是互斥的,如财务就不能自己报账自己审批,对于这个角色一般不能和其他角色见人。通过职责分离可以解决这一问题。静态职责分离:在权限配置阶段就做限制。如同一个用户不能被授予互斥的角色,授予时做互斥判断。动态职责分离:运行阶段进行限制。如一个用户即使有多个角色,代码也会实时判断其真正有效的角色是几个。

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

静态职责分离

动态职责分离

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

用户表

角色表

1:n

权限表

1:n

访问合集

1:n

1:1

用户所具备的权限是用户所具备角色的权限合集

静态职责分离

动态职责分离

0:n


相关文章
|
2月前
|
存储 安全 小程序
认识OAuth2.0
OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心是通过令牌(token)实现权限控制,广泛用于第三方登录、服务间资源调用等场景,支持授权码、简化、密码和客户端四种模式,保障系统安全与用户体验。
认识OAuth2.0
|
2月前
|
JSON Java API
Feign远程调用
本文介绍了如何使用Feign替代RestTemplate实现微服务间的HTTP调用,涵盖依赖引入、注解配置、自定义日志、连接池优化及代码抽取等实践。通过Feign可简化远程调用,提升开发效率,并结合最佳实践实现代码复用与解耦。
|
2月前
|
安全 Java Spring
过滤器链加载原理
本文深入解析Spring Security核心过滤器链原理,重点剖析DelegatingFilterProxy如何通过代理模式加载springSecurityFilterChain,结合FilterChainProxy与SecurityFilterChain源码,揭示十五个安全过滤器的初始化及执行流程,帮助理解框架底层机制。
过滤器链加载原理
|
2月前
|
负载均衡 Java 数据安全/隐私保护
Gateway服务网关
网关是微服务架构的统一入口,核心功能包括请求路由、权限控制、限流及负载均衡。通过Spring Cloud Gateway可实现高效路由转发与过滤器处理,支持跨域配置,提升系统安全与性能。
Gateway服务网关
|
2月前
|
前端开发 程序员
常见注解及使用说明
`@RequestMapping`用于定义控制器中处理请求的接口路径,实现前后端对接。通过指定URL路径,如`/staff/add`,使前端能准确访问对应接口。其派生注解如`@GetMapping`、`@PostMapping`等为简化常用HTTP方法而封装,本质仍基于`@RequestMapping`。
常见注解及使用说明
|
2月前
|
安全 Java 数据安全/隐私保护
认识SpringSecurity
SpringSecurity是Java领域主流的安全框架,核心功能包括认证、鉴权及防护常见攻击。支持表单、OAuth2、JWT等多种认证方式,基于过滤器链实现灵活权限控制,并提供CSRF、会话固定等安全防护机制。
|
2月前
|
安全 数据安全/隐私保护 微服务
什么是权限管理
权限管理包含认证与授权两大核心:认证确认用户身份(如登录),授权则根据角色分配访问权限,确保系统安全。常见模型有ACL、RBAC等,通过角色叠加实现菜单级控制,保障数据安全与操作合规,是系统安全的基石。
什么是权限管理
|
2月前
|
负载均衡 Java 应用服务中间件
微服务网关与配置中心
本文介绍了微服务架构下的网关路由与鉴权机制,重点讲解使用Spring Cloud Gateway实现请求路由、负载均衡及JWT身份校验。通过Nacos实现服务发现,网关统一处理前端请求,解决多入口问题,并在全局过滤器中实现用户鉴权,保障系统安全。
|
2月前
|
存储 缓存 Java
自定义注解
本文介绍Java自定义注解的实现原理与应用,结合Spring AOP和过滤器完成日志、权限控制及登录验证。通过@Target、@Retention等元注解定义注解,并在控制器中通过拦截器解析,实现如无需登录访问等功能,提升代码可读性与复用性。(239字)
|
2月前
|
存储 缓存 安全
常用过滤器介绍
Spring Security基于AOP思想,通过过滤器链实现安全控制。本文详解15个核心过滤器,如SecurityContextPersistenceFilter、CsrfFilter、UsernamePasswordAuthenticationFilter等,分别负责上下文管理、防跨站请求伪造、认证处理等功能,助你深入理解其工作原理。(238字)