通用权限管理模型

简介: 本文介绍了ACL和RBAC两大权限模型。ACL通过直接授权用户或角色访问对象,实现简单但管理复杂;RBAC则基于角色分配权限,通过用户-角色-权限三层结构提升管理效率,并衍生出支持角色继承(RBAC1)、职责分离(RBAC2)及两者结合的RBAC3模型,适用于复杂系统权限控制。

笔者的学习认知中,对于一个新框架往往都会先去学习一下底层模型(即表结构及关系),因此这里我们就来了解一下通用的权限管理有哪些,各自的模型关系大概是什么样子,好对我们接下来的学习有个全局认知。除了本节讲解的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月前
|
JSON 安全 API
京东API接口的应用场景介绍
京东API是京东开放平台提供的标准化接口,基于RESTful架构,支持商品查询、订单管理、支付、物流跟踪与营销数据分析等核心电商功能。通过OAuth 2.0认证保障安全,助力开发者高效构建集成应用。
245 2
聊天框(番外篇)—如何实现@功能的整体删除
上一篇文章中,我们已经初步实现了聊天输入框,但其@功能是不完善的,例如无法整体删除、无法获取除用户名以外的数据(假设用户名不是唯一的)。有问题就要想办法解决,在网上百度了一圈后,倒是有一些收获。本文就着重解决@的整体删除以及获取额外数据。
1515 0
聊天框(番外篇)—如何实现@功能的整体删除
|
存储 数据挖掘 BI
数据仓库深度解析与实时数仓应用案例探析
随着数据量的不断增长和数据应用的广泛深入,数据治理和隐私保护将成为数据仓库建设的重要议题。企业需要建立完善的数据治理体系,确保数据的准确性、一致性和完整性;同时加强隐私保护机制建设,确保敏感数据的安全性和合规性。
1168 55
Java系列之 IDEA 为类 和 方法设置注解模板
这篇文章介绍了如何在IntelliJ IDEA中为类和方法设置注解模板,包括类模板的创建和应用,以及两种不同的方法注解模板的创建过程和实际效果展示,旨在提高代码的可读性和维护性。
|
存储 算法 安全
在 Java 中如何从 ArrayList 获取子列表
【8月更文挑战第23天】
562 0
|
存储 JSON 关系型数据库
带你走进PostgreSQL的世界
带你走进PostgreSQL的世界
848 0
|
存储 缓存 关系型数据库
RBD与Cephfs
RBD与Cephfs
356 6
|
小程序 安全 Java
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战(二)
|
存储 关系型数据库 MySQL
CentOS上安装MySQL 8.0的详细教程
CentOS上安装MySQL 8.0的详细教程
6178 0
|
前端开发 JavaScript API
React/Vue 实现路由鉴权、导航守卫和路由拦截的优化建议
本文介绍了在 React 和 Vue 中如何实现路由鉴权、导航守卫和路由拦截的方法。路由鉴权是指根据用户权限验证用户是否有权限访问特定的路由页面。导航守卫是在路由切换之前执行的钩子函数,用于控制路由的跳转。路由拦截是在路由处理过程中拦截某些特定路由的行为。本文将介绍 React 和 Vue 中的相关概念和实现方式,并通过示例代码展示如何应用这些概念来实现路由鉴权、导航守卫和路由拦截。
1084 2