【SpringBoot】RBAC权限控制

       📝个页人主:五敷有你      
 🔥系列专栏:SpringBoot
⛺️稳重求进,晒太阳

权限系统与RBAC模型

权限

为了解决用户和资源的操作关系, 让指定的用户,只能操作指定的资源。

权限功能

  • 菜单权限:某用户,某角色能看到某菜单,例如:超管能看到所有的菜单,普通员工只能看到请假菜单。
    • 粒度细的话可以做到按钮、标签显示不显示,字段显示不显示等,
    • 主要是前端的事情。具体实现可以将权限存在session中,用一些v-if 标签进行判断 有就生成没有就忽略
  • 接口权限:某用户,某角色能操作某接口,例如:超管能操作所有按钮接口,普通用户只能操作提交请假,查看请求列表。
    • 因为上面的操作是可以把按钮隐掉了,一部分小白是操作不了相关操作,但是如果另一个码农知道了你的接口,就可以使用接口模拟操作了。
    • 主要是后端的事情(鉴权)。
  • 数据权限,某用户,某角色能查看某数据,例如:超管能看到所有人的请假单,普通用户只能看到自己的请假单
    • 例如查看工资条接口,这个接口权限都能调用,但是工资条肯定只能看到自己的,超过可以看到所有人的。这里数据权限体会下。
    • 能crud哪些数据。
    • 能看到哪些字段。
    • 主要是后端的事情

RBAC权限系统

概述

通常情况下,一个系统,除了登陆也就是认证之外,还应该有一个重要的功能,就是鉴权,使用rbac可以很好的解决上述的问题。

  • 认证(authentication)-规定了谁能够登陆
  • 鉴权(authorization)-规定了谁能访问那些接口,浏览那些页面,使用哪些功能,

RBAC(Role-Based Access Control )基于角色的访问控制。

不同人,有不同的权限,老师有判卷权限,学生有答题的权限...

RBAC语言中的角色通常是指一组具有某些特征的人,例如:部门 /地点/资历/工作职责等

RBAC认为权限的过程可以抽象概括为:

判断【Who是否可以对What进行How的访问操作(Operator)】这个逻辑表达式的值是否为True的求解过程。

即将权限问题转换为Who、What、How的问题。who、what、how构成了访问权限三元组。

定义角色后,就要分配权限,可能涉及如下:

Access(访问),这个人能看到什么

  • 访问表示用户可以查看或访问系统中哪些资源。这决定了用户对特定数据或功能的可见性。在RBAC中,可以通过角色分配访问权限,使得一组用户共享相似的访问能力。
  • 例如,在文件系统中,访问可以控制用户能够访问哪些文件或目录。在应用程序中,访问可以决定用户是否能够查看特定页面或功能。

Operations(操作),这个人能读到什么,这个人能写什么,该人可以创建和删除文件吗?

  • 操作定义了用户对其拥有访问权限资源可以执行的具体动作。这包括了读取、写入、删除、创建等各种可能的操作。通过将操作与访问权限关联,RBAC提供了对用户行为更细粒度的控制。
  • 例如,在数据库中,操作可能包括查询、更新、删除或插入记录。在文件系统中,操作可以确定用户是否能够执行文件的特定操作,如复制、移动或重命名。

Session(会话),该人可以在系统中停留多长时间,,什么时候可以登录,登录什么时候过期

  • 会话管理用户在系统中的停留时间以及与身份验证和授权相关的时间参数。这包括了用户何时可以登录系统、登录会话的持续时间,以及在什么条件下会话可能被终止。
  • 通过对会话进行有效管理,可以提高系统的安全性,防止未经授权的访问,并确保合规性。会话设置可以包括过期时间、自动注销等策略,以控制用户在系统中的活动时间。

RBAC分为了四级

第0级,扁平化,最简单也是最常用的RBAC形式,与员工使用角色获得权限

第1级,分层的,这建立在Flat RBAC 规则之上,增加了角色层次结构

比如销售有销售经理,销售总监,销售的普通人员,都是销售但是级别不一样。

第2级别,受约束的,这建立在分层RBAC之上,增加了职责分离

第3级别,对称的,建立在受约束的RBAC模型之上,并增加了权限审查

RBAC支持公认的安全原则:

最小特权原则、责任分离原则和数据抽象原则。

  • 最小特权原则得到支持:是因为在RBAC模型中可以通过限制分配给角色权限的多少和大小来实现,分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要就可以了。
  • 责任分离原则的实现:是因为在RBAC模型中可以通过在完成敏感任务过程中分配两个责任上互相约束的两个角色来实现,例如在清查账目时,只需要设置财务管理员和会计两个角色参加就可以了。
  • 数据抽象:借助于抽象许可权这样的概念实现的,如在账目管理活动中,可以使用信用、借方等抽象许可权,而不是使用操作系统提供的读、写、执行等具体的许可权。但RBAC并不强迫实现这些原则,安全管理员可以允许配置RBAC模型使它不支持这些原则。因此,RBAC支持数据抽象的程度与RBAC模型的实现细节有关。

RBAC的组成

在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。

RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理

在讲解之前,我们先介绍一些名词:

  • User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
  • Role(角色):不同角色具有不同的权限,比如:人事、会计等
  • Permission(权限):访问权限,比如
  • 用户-角色映射:用户和角色之间的映射关系
  • 角色-权限映射:角色和权限之间的映射

它们之间的关系如下图所示:

例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建用户和冻结用户,而管理员由于被授予所有权限,所以可以做所有操作。

rbac说明图

完成RBAC模型,我们需要设计五张表,如下:

.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下安装go

下载golang Go 官网下载地址: https://golang.org/dl/ Go 官方镜像站(推荐): https://golang.google.cn/dl/ 选择安装包 验证有没有安装成功 查看 go 环境 说明 : Go1.11 版本之后无需手动配置环境变量&#xff0c…

29 python快速上手

Python操作MySQL和实战 1. 事务1.1 MySQL客户端1.2 Python代码 2. 锁2.1 排它锁2.2 共享锁 3. 数据库连接池4. SQL工具类4.1 单例和方法4.2 上下文管理 5.其他总结 目标:掌握事务和锁以及Python操作MySQL的各种开发必备知识。 概要: 事务锁数据库连接池…

Weblogic反序列化漏洞分析之CVE-2021-2394

目录 简介 前置知识 Serializable示例 Externalizable示例 联系weblogic ExternalizableLite接口 ExternalizableHelperl类 JdbcRowSetImpl类 MethodAttributeAccessor类 AbstractExtractor类 FilterExtractor类 TopNAggregator$PartialResult类 SortedBag$Wrappe…

【测试运维】web自动化全知识点笔记第1篇:什么是Web自动化测试(已分享,附代码)

本系列文章md笔记(已分享)主要讨论Web自动化测试相关知识。了解什么是自动化,理解什么是自动化测试以及为什么要使用自动化测试。具体包含:WebDriver的基本操作,WebDriver的鼠标、键盘操作,下拉选择框、警告…

【教学类-46-01】吉祥字门贴1.0(华光通心圆_CNKI 文本框 空心字涂色,最好繁体字)

作品展示 背景需求: 马上就要过年了,家家户户大门上贴上对联和福字 我想用正方形红色手工纸(15CM)也做一个幼儿描线版的福字 问题一:福字顺时针旋转45度 打印纸上制作福字,需要让这个字顺时针旋转45度&am…

【C++栈和队列:数据结构中的经典组合,高效处理先进先出与后进先出问题的最佳方案】

[本节目标] 1. stack的介绍和使用 2. queue的介绍和使用 3. priority_queue的介绍和使用 4. 容器适配器 1. stack的介绍和使用 1.1 stack的介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的…

【DC渗透系列】DC-2靶场

arp先扫 ┌──(root㉿kali)-[~] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:6b:ed:27, IPv4: 192.168.100.251 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.100.1 00:50:56:c0:00:08 VMware, In…

DolphinScheduler实现隔几天调度

1.场景分析 dolphinscheduler(海豚)定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时,跨月,每次跨月等都会从每个月的第1天(第几天开始可以设定)开始重新计时…

Unity3d Cinemachine篇(四)— StateDrivenCamera

文章目录 前言使用StateDrivenCamera根据不同动画切换相机1. 创建一个游戏物体2. 创建StateDrivenCamera相机3. 创建动画4. 设置相机5. 完成 前言 上一期我们简单的使用了FreeLook相机,这次我们来使用一下StateDrivenCamera 使用StateDrivenCamera根据不同动画切换…

docker maven插件使用介绍

1、配置docker连接 开放docker tcp连接参考本专栏下令一篇文章 2、docker service窗口 3、根据dockerfile 构建镜像 注意 idea 用通过管理员身份启动,否则连不上docker 构建前添加maven goal 打包 4、运行镜像 创建容器 5、运行docker compose 报错 需要先配置d…

django微博热搜数据分析与可视化系统python毕业设计

简而言之,数据可视化是以图形方式呈现结构化或非结构化数据,从而将隐藏在数据中的信息直接呈现给人们。但是有一个陷阱:它不仅仅是使用数据可视化工具将数据转化为图形。相反,它是从数据的角度看待世界。换句话说,数据可视化的对象…

(7)【Python/机器学习/深度学习】Deep-Learning模型与算法应用—深度学习基础搭建最小神经网络

目录 一、深度学习使用python建立最简单的神经元neuron 1、人工智能&机器学习&深度学习三者关系 2、机器学习& 深度学习区别 3、神经元 4、最小神经网络模型(神经元/感知器) 5、(案例)Predicting if a person would buy life insurn…

使用vue脚手架构建项目

一、前言 * 创建好vue-cli的环境,下载好vue包依赖* 本文使用环境:vue/cli 5.0.8二、步骤 创建vueTest文件夹,管理员身份运行cmd , 进入到vueTest文件夹 执行命令vue create 你的项目名 ,这里我定义的项目名为: my-project 基于…

基于微信小程序的校园水电费管理小程序的研究与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

DAY39: 动态规划不同路径问题62

Leetcode: 62 不同路径 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。 基本思路 1、确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条…

SpringBoot整合Flowable最新教程(二)启动流程

介绍 文章主要从SpringBoot整合Flowable讲起,关于Flowable是什么?数据库表解读以及操作的Service请查看SpringBoot整合Flowable最新教程(一);   其他说明:Springboot版本是2.6.13,java版本是1…

Sentinel应用笔记

概念 当A、B、G、H掉线,其他服务就没法通信了 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。 特性…

Vue3.0(二):Vue组件化基础 - 脚手架

Vue组件化基础 - 脚手架 Vue的组件化 我们在处理一些任务量比较庞大的工作时候,会将工作内容进行拆分,分步骤完成 而组件化的思想正式如此,对于一个庞大的项目,我们可以将其拆分成一个个的小功能,分步骤进行实现 组…

MySQL数据库基础第二篇(函数)

文章目录 一、函数介绍二、字符串函数1.练习代码2.读出结果 三、数值函数1.练习代码2.读出结果 四、日期函数1.练习代码2.读出结果 五、流程控制函数1.练习代码2.读出结果 在当代技术世界中,掌握数据库设计和操作的知识和技能,尤其是对SQL的理解&#xf…

react 之 useInperativeHandle

useInperativeHandle是通过ref暴露子组件中的方法 1.场景说明-直接调用子组件内部的方法 import { forwardRef, useImperativeHandle, useRef } from "react"// 子组件const Son forwardRef((props, ref) > {// 实现聚焦逻辑const inputRef useRef(null)const …