通用权限管理模型

简介: 本文介绍了ACL(访问控制列表)和RBAC(基于角色的访问控制)两种主流权限模型。ACL直接为用户或角色授权,简单直观;RBAC通过“用户-角色-权限”三层结构实现灵活、可维护的权限管理,包含RBAC0至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


相关文章
|
8月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
1640 0
|
4月前
|
JSON NoSQL 关系型数据库
MongoDB简介
MongoDB是一款开源、高性能、无模式的文档型数据库,采用类似JSON的BSON格式存储数据,结构灵活,支持复杂数据类型。它兼具NoSQL的扩展性与类关系型数据库的操作体验,适用于快速开发和高并发场景。
|
4月前
|
存储 NoSQL 定位技术
MongoDB什么时候用
适用于无需复杂事务、需快速迭代、高并发读写、海量数据存储(TB至PB级)、易扩展、高可用(99.999%)、支持地理与文本查询的应用场景。满足1项即可考虑MongoDB,2项以上强烈推荐。
|
4月前
|
存储 NoSQL 物联网
MongoDB应用场景
MongoDB适用于社交、游戏、物流、物联网及视频直播等场景,擅长处理数据量大、读写频繁、事务性要求不高的应用。其灵活的文档模型和高效查询能力,支持用户信息、日志、订单状态等复杂数据的存储与访问。
HTTP协议中常见的状态码 ?
HTTP状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议,如WebSocket)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器内部错误),广泛应用于Web开发中。
|
4月前
|
机器学习/深度学习 Java 数据库连接
MyBatis 关联映射详解:1:1、1:N、N:1 与 N:N 实现方式
本文详解 MyBatis 中 resultMap 的四种关联映射:一对一、一对多、多对一和多对多,结合代码示例讲解实现方式与最佳实践,助你掌握复杂对象关系的数据映射技巧。
|
5月前
|
SQL 数据可视化 关系型数据库
专为 Apache Doris 打造的可视化数据管理工具 SelectDB Studio
SelectDB Studio 提供 Desktop & Server 双版本,专注于为用户提供高效、便捷的可视化操作体验,帮助数据开发者、DBA 低门槛、高效率地对 Apache Doris 及其兼容数据库中的数据进行可视化开发和管理。
766 0
|
监控 安全 中间件
Python Django 后端架构开发: 中间件架构设计
Python Django 后端架构开发: 中间件架构设计
441 1
|
8月前
|
存储 供应链 前端开发
如何开发一套仓库管理系统?(附架构图+流程图+代码参考)
仓库管理系统(WMS)是现代物流与供应链管理的重要工具。本文介绍WMS的系统架构、功能模块、业务流程设计及开发实现,帮助企业提升库存管理效率,降低错误率,实现自动化操作,提供实用的开发方案。
|
存储 Java 数据库
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类
这篇文章介绍了如何在Java中通过加盐和加密算法(如MD5和SHA)安全地存储密码,并提供了一个密码工具类PasswordUtils和密码编码类PasswordEncoder的实现示例。
529 10
密码专辑:对密码加盐加密,对密码进行md5加密,封装成密码工具类

热门文章

最新文章