深入理解RBAC权限系统

最近,一位朋友在面试中被问及如何设计一个权限系统。我们注意到目前许多后台管理系统(包括一些热门的如若依快速开发平台)都采用了RBAC访问控制策略。该策略通过将权限授予角色,然后将角色分配给用户,从而实现对系统资源的访问控制。今天,我们将详细解释基于RBAC的权限系统。

RBAC-SYS.jpg

RBAC描述

RBAC(Role-Based Access Control)是一种访问控制模型,其核心概念是基于角色的权限分配。该模型的设计目标是简化对系统资源的访问管理,提高系统的安全性和可维护性。

RBAC的实现通常包括以下步骤:

  • 设计角色和权限的层次结构。
  • 将用户分配到合适的角色。
  • 关联权限到角色,形成访问控制矩阵。
  • 通过会话管理机制维护权限的有效性。


RBAC-MODULE.png

以下是RBAC权限系统的一些描述:

角色定义

在RBAC系统中,角色是一组相互关联的权限的集合。角色可以代表用户的职能、职位或责任。例如,系统管理员、普通用户、审计员等都可以是角色。在一些企业中权限系统中,他们采用的三权分立的权限体系,就是通过角色和用户的类型来控制的。

权限定义

权限表示对系统资源或操作的访问权力,包括不同级别的访问,如读、写、执行等操作。通常,权限与具体任务或操作相关联,例如访问特定文件、修改用户信息等。在我们的权限系统中,权限的粒度一般细化到页面上的操作按钮级别。一些系统还包含数据权限,例如可以访问当前部门及其下级部门的数据,或者只能查看特定系统的数据等。

角色分配

用户通过被分配到一个或多个角色而获得相应的权限。这使得权限管理更加简化,因为不再需要为每个用户直接分配权限,而只需管理角色与权限的关系。

权限关联

每个角色都与特定的权限相关联。这意味着当用户被分配到某个角色时,他们将自动拥有该角色所关联的权限。这种关联可以通过访问控制矩阵或类似的结构来实现。

会话管理

用户登录系统后,会话管理机制负责维护用户与其角色相关联的权限。一旦会话结束,通常会触发权限的自动撤销。我们通常采用将会话存储到Redis中,并设置过期时间的方式来管理会话。用户在访问时会刷新过期时间,确保会话的有效性。

审计和监控

RBAC系统通常包括审计和监控功能,以便记录用户活动、权限变更和系统访问情况。这有助于检测潜在的安全问题和确保合规性。

动态调整:

RBAC系统允许在运行时动态调整角色和权限的关联关系。这种灵活性使得系统能够适应不断变化的组织结构和业务需求。

RBAC的特点

  • 简化管理

通过将权限关联到角色,RBAC简化了大规模用户权限管理的复杂性。

  • 灵活性

RBAC模型具有较强的灵活性,可以根据组织需求调整角色和权限的关联关系。

  • 降低错误

通过减少直接分配权限给用户的操作,RBAC降低了由于错误授权导致的系统安全风险。

数据库表设计

数据库表ER图如下:

RBAC-ER.png

具体表设计如下:

sys_menu

表注释: 菜单权限表

字段类型默认注释
id (主键)bigint菜单ID
menu_namevarchar(50)NULL菜单名称
parent_idbigint0父菜单ID
order_numint0显示顺序
pathvarchar(200)路由地址
componentvarchar(255)NULL组件路径
queryvarchar(255)NULL路由参数
is_frameint1是否为外链(0是 1否)
menu_typechar(1)菜单类型(M目录 C菜单 F按钮)
visiblechar(1)0菜单状态(0显示 1隐藏)
statuschar(1)0菜单状态(0正常 1停用)
permsvarchar(100)NULL权限标识
iconvarchar(100)#菜单图标
create_byvarchar(64)创建者
create_timedatetimeNULL创建时间
update_byvarchar(64)更新者
update_timedatetimeNULL更新时间
remarkvarchar(500)备注

sys_role

表注释: 角色信息表

字段类型默认注释
id (主键)bigint角色ID
role_namevarchar(30)NULL角色名称
role_keyvarchar(100)NULL角色权限字符串
statuschar(1)NULL角色状态(0正常 1停用)
del_flagchar(1)0删除标志(0代表存在 2代表删除)
create_byvarchar(64)创建者
create_timedatetimeNULL创建时间
update_byvarchar(64)更新者
update_timedatetimeNULL更新时间
remarkvarchar(500)NULL备注

sys_role_menu

表注释: 角色和菜单关联表

字段类型默认注释
id (主键)bigint
role_idbigintNULL角色ID
menu_idbigintNULL菜单ID

sys_user

表注释: 用户信息表

字段类型默认注释
id (主键)bigint用户ID
user_namevarchar(30)NULL用户账号
nick_namevarchar(30)NULL用户昵称
phonenumbervarchar(11)手机号码
passwordvarchar(100)密码
statuschar(1)0帐号状态(0正常 1停用)
del_flagchar(1)0删除标志(0代表存在 2代表删除)
create_byvarchar(64)创建者
create_timedatetimeNULL创建时间
update_byvarchar(64)更新者
update_timedatetimeNULL更新时间
remarkvarchar(500)NULL备注

sys_user_role

表注释: 用户和角色关联表

字段类型默认注释
id (主键)bigint主键ID
user_idbigintNULL用户ID
role_idbigintNULL角色ID

sys_logininfor

表注释: 系统登录日志表

字段类型默认注释
id (主键)bigint访问ID
user_idbigintNULL用户id
user_namevarchar(50)用户账号
ipaddrvarchar(128)登录IP地址
login_locationvarchar(255)登录地点
browservarchar(50)浏览器类型
osvarchar(50)操作系统
statuschar(1)0登录状态(0成功 1失败)
msgvarchar(255)提示消息
login_timedatetimeNULL访问时间

总结

RBAC权限系统作为一种可靠而强大的访问控制机制,为系统安全提供了坚实的基础。通过深入理解RBAC的核心概念和工作原理,我们可以更好地应用该模型,确保系统在访问控制方面达到最佳性能,同时提高系统的可维护性和灵活性。一些系统在基于RBAC角色系统的基础上引入了临时角色、基础角色等功能,以进一步完善RBAC的灵活性和适应性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spark精讲】Spark任务运行流程

Spark任务执行流程 部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上,而cluster模式提交任务与Driver进程不在同一个节点。 Client模式 Clinet模式是在spark-submit提交任务的节点上运行Driver进程。 执行流…

day01、什么是数据库系统?

数据库系统介绍 1.实例化与抽象化数据库系统2.从用户角度看数据库管理系统的功能2.1 数据库定义功能2.2 数据库操纵2.3 数据库控制2.4 数据库维护功能2.5 数据库语言与高级语言 3.从系统:数据库管理系统应具有什么功能 来源于战德臣的B站网课 1.实例化与抽象化数据库…

Git篇---第五篇

系列文章目录 文章目录 系列文章目录前言一、提交对象包含什么?二、如何在Git中创建存储库?三、怎样将 N 次提交压缩成一次提交?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…

D30|继续贪心

别太贪心了,做出一道贪心就应该知足呜呜呜 860.柠檬水找零 初始思路&&题解复盘: 确实不难,按照这个思路书写即可。 情况一:账单是5,直接收下。 情况二:账单是10,消耗一个5,增加一个10…

『 Linux 』进程地址空间概念

文章目录 🫙 前言🫙 进程地址空间是什么🫙 写时拷贝🫙 可执行程序中的虚拟地址🫙 物理地址分布方式 🫙 前言 在c/C中存在一种内存的概念; 一般来说一个内存的空间分布包括栈区,堆区,代码段等等; 且内存是…

长三角区域部分行业企业是如何实践招标采购供应链系统建设的?

长三角城市群是我国经济发展最活跃、开放程度最高、创新能力最强的区域之一,在国家现代化建设大局和全方位开放格局中具有举足轻重的战略地位。今年前三季度,长三角实现地区生产总值约22万亿元,占全国经济总量的24%。 采购作为供…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

极兔速递查询,极兔速递单号查询,筛选出指定派件员的单号

批量查询极兔速递单号的物流信息,并将指定派件员的单号筛选出来。 所需工具: 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&#xff…

【基础知识】大数据概述

关键词—分布式 化整为零,再化零为整 大数据的定义 传统数据库处理起来困难的数据集。 发展历程 中国开源生态图谱2023 参考内容 中国开源生态图谱 2023.pdf 技术组件说明 数据集成 sqoop、dataX、flume 数据存储 hdfs、kafka 数据处理 mapreduce、hive…

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync

目录 1,功能2,注意点3,shell脚本介绍4,bash内容 1,功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2,注意点 需要修改的地方:hadoop250 hadoop251 hadoop252 hadoop253 hado…

“2024杭州国际安防产品展览会”加快推进浙江平安城市体系现代化

2024杭州国际安防产品展览会,将于2024年3月份在杭州国际博览中心隆重召开。作为全球安防产业的重要盛会,该展览会以其“专业化、市场化”为特点,聚焦每年核心主题,以专业化为核心,打造品牌项目,使之成为备受…

RuoYi-Cloud诺依微服务项目

1、架构图 从图中解析出RuoYi-Cloud 使用微服务技术栈 网关:Gateway远程调用:Ribbon/Feign注册中心:Nacos Discovery熔断降级:Sentinel配置中心:Nacos Config链路追踪:Sleuth ZipKin/SkyWalking &#x…

Stable Diffusion 系列教程 - 3 模型下载和LORA模型的小白入门

首先,一个比较广泛的模型下载地址为:Civitai Models | Discover Free Stable Diffusion Models 黄框是一些过滤器,比如checkpoints可以理解为比如把1.5版本的SD模型拷贝一份后交叉识别新的画风或场景后得到的模型,可以单独拿出来使…

SQL中的三值逻辑:TRUE、FALSE 和 UNKNOWN。

在SQL中,通常采用三值逻辑处理条件表达式的真值。这种逻辑是基于三种可能的真值状态:TRUE、FALSE 和 UNKNOWN。 TRUE(真): 表示条件为真或成立。 FALSE(假): 表示条件为假或不成立。…

EasyExcel处理表头的缓存设置

在学习EasyExcel 时会发现针对使用类模型配置表头相关属性时,EasyExcel 会使用到缓存技术以提升表头的解析速度如下代码: 这些参数再何时设置的哪? 在easyExcel 基础参数设置中会有这个参数filedCacheLocation 。默认采用的使用线程级别的…

C++学习笔记—— C++内存管理方式:new和delete操作符进行动态内存管理

系列文章目录 http://t.csdnimg.cn/d0MZH 目录 系列文章目录http://t.csdnimg.cn/d0MZH 比喻和理解a.比喻C语言开空间C开空间 b.理解a、C语言的内存管理的缺点1、开发效率低(信息传递繁琐)2、可读性低(信息展示混乱)3、稳定性差&…

什么是shell?

系统内核是操作系统的基本组成部分,它负责管理系统的硬件和软件资源,并提供一组基本的系统服务。内核是操作系统的核心,控制着计算机的所有主要功能,包括内存管理、进程管理、设备驱动程序、系统调用和安全防护等。内核在计算机中…

轻量封装WebGPU渲染系统示例<44>- 材质组装流水线(MaterialPipeline)之灯光和阴影(源码)

目标: 数据化,模块化,自动化 备注: 从这个节点开始整体设计往系统规范的方向靠拢。之前的都算作是若干准备。所以会和之前的版本实现有些差异。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sa…

前端点点点加载小点样式css动画过程实现

对话的 ... 加载动画&#xff0c;直接用 CSS 就可以实现&#xff0c;样式可以自己改&#xff0c;逻辑大差不差 <div class"loading-text"><span class"dot1"></span><span class"dot2"></span><span class&quo…

SSM整合——Springboot

1.0 概述 1.1 持久层&#xff1a; DAO层&#xff08;mapper&#xff09; DAO层&#xff1a;DAO层主要是做数据持久层的工作&#xff0c;负责与数据库进行联络的一些任务都封装在此 DAO层的设计首先是设计DAO的接口&#xff0c; 然后在spring-mapper.xml的配置文件中定义此接…