RBAC详细解释

关于RBAC

     **RBAC** = **R**ole **B**ased **A**ccess **C**ontrol(基于角色的访问控制)

     RBAC是经典的用户权限管理的设计思路。在这样的设计中,会存在3种类型:用户、角色、权限,权限将分配到各种角色上,用户可以关联某种角色,进而实现用户与权限相关。使用这样的设计,更加利于统一管理若干个用户的权限。

    在RBAC的设计思路中,用户与角色一般是多对多的关系,而在数据库中,仅仅只是使用“用户”和“角色”这2张表是不利于维护多对多关系的,通常会增加一张中间表,专门记录对应关系,同理,角色和权限也是多对多的关系,也需要使用中间表来记录对应关系!

关于这些表的设计参考如下:

   admin:管理员表**
-- 管理员表:创建数据表

drop table if exists ams_admin;
create table admin (id bigint unsigned auto_increment,username varchar(50) default null unique comment '用户名',password char(64) default null comment '密码(密文)',nickname varchar(50) default null comment '昵称',avatar varchar(255) default null comment '头像URL',phone varchar(50) default null unique comment '手机号码',email varchar(50) default null unique comment '电子邮箱',description varchar(255) default null comment '描述',is_enable tinyint unsigned default 0 comment '是否启用,1=启用,0=未启用',last_login_ip varchar(50) default null comment '最后登录IP地址(冗余)',login_count int unsigned default 0 comment '累计登录次数(冗余)',gmt_last_login datetime default null comment '最后登录时间(冗余)',gmt_create datetime default null comment '数据创建时间',gmt_modified datetime default null comment '数据最后修改时间',primary key (id)
) comment '管理员表' charset utf8mb4;

-- 管理员表:插入测试数据

insert into admin (username, password, nickname, email, description, is_enable) values('root', '1234', 'root', 'root@tedu.cn', '最高管理员', 1),('super_admin', '1234', 'administrator', 'admin@tedu.cn', '超级管理员', 1),('nobody', '1234', '无名', 'liucs@tedu.cn', null, 0);

role:角色表**


-- 角色表:创建数据表
drop table if exists role;
create table role (id bigint unsigned auto_increment,name varchar(50) default null comment '名称',description varchar(255) default null comment '描述',sort tinyint unsigned default 0 comment '自定义排序序号',gmt_create datetime default null comment '数据创建时间',gmt_modified datetime default null comment '数据最后修改时间',primary key (id)
) comment '角色表' charset utf8mb4;

-- 角色表:插入测试数据

insert into role (name) values('超级管理员'), ('系统管理员'), ('商品管理员'), ('订单管理员');

admin_role:管理员与角色的关联表


-- 管理员角色关联表:创建数据表

drop table if exists admin_role;
create table admin_role (id bigint unsigned auto_increment,admin_id bigint unsigned default null comment '管理员id',role_id bigint unsigned default null comment '角色id',gmt_create datetime default null comment '数据创建时间',gmt_modified datetime default null comment '数据最后修改时间',primary key (id)
) comment '管理员角色关联表' charset utf8mb4;

-- 管理员角色关联表:插入测试数据

insert into admin_role (admin_id, role_id) values(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (2, 4), (3, 3);

permission:权限表

l

-- 权限表:创建数据表
drop table if existspermission;
create table permission (id bigint unsigned auto_increment,name varchar(50) default null comment '名称',value varchar(255) default null comment '值',description varchar(255) default null comment '描述',sort tinyint unsigned default 0 comment '自定义排序序号',gmt_create datetime default null comment '数据创建时间',gmt_modified datetime default null comment '数据最后修改时间',primary key (id)
) comment '权限' charset utf8mb4;

-- 权限表:插入测试数据

insert into permission (name, value, description) values
('商品-商品管理-读取', '/pms/product/read', '读取商品数据,含列表、详情、查询等'),
('商品-商品管理-编辑', '/pms/product/update', '修改商品数据'),
('商品-商品管理-删除', '/pms/product/delete', '删除商品数据'),
('后台管理-管理员-读取', '/ams/admin/read', '读取管理员数据,含列表、详情、查询等'),
('后台管理-管理员-编辑', '/ams/admin/update', '编辑管理员数据'),
('后台管理-管理员-删除', '/ams/admin/delete', '删除管理员数据');
```

role_permission:角色与权限的关联表


-- 角色权限关联表:创建数据表

drop table if exists role_permission;
create table role_permission (id bigint unsigned auto_increment,role_id bigint unsigned default null comment '角色id',permission_id bigint unsigned default null comment '权限id',gmt_create datetime default null comment '数据创建时间',gmt_modified datetime default null comment '数据最后修改时间',primary key (id)
) comment '角色权限关联表' charset utf8mb4;

-- 角色权限关联表:插入测试数据

insert into role_permission (role_id, permission_id) values(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6),(2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6),(3, 1), (3, 2), (3, 3);

总结

     RBAC(Role-Based Access Control)是一种访问控制模型,它基于用户的角色来管理对系统资源的访问权限。RBAC通过定义角色、权限和用户之间的关系,实现了对系统的细粒度控制,提供了一种灵活且安全的访问控制机制。

RBAC主要包括以下几个核心的概念:

  1. 角色(Role):角色是一组与特定功能或职责相关联的权限的集合。角色是RBAC中最重要的概念之一,它代表了用户在系统中所担任的角色或职位。

  2. 权限(Permission):权限是指对系统资源进行某种操作或访问的能力。权限可以是读取、写入、修改或删除等操作,也可以是对特定数据或功能的访问。

  3. 用户(User):用户代表系统中的实际用户或实体。用户可以被分配一个或多个角色,并由角色决定其在系统中所能执行的操作。

  4. 角色分配(Role Assignment):角色分配是指将角色分配给用户的过程。通过角色分配,系统可以确定每个用户在系统中所拥有的权限。

  5. 授权(Authorization):授权是指根据用户的角色和权限,对其请求进行验证和许可的过程。在RBAC中,授权决定了用户能否执行某个操作或访问某个资源。

  6. 角色继承(Role Inheritance):角色继承是指一个角色可以继承另一个角色的权限。通过角色继承,可以建立角色之间的层次结构,使得权限的管理更加灵活。

通过RBAC可以实现以下几个优点:

  1. 简化权限管理:RBAC通过角色的概念,将权限授权的管理与用户管理分离开来,简化了系统的权限管理。只需管理角色的权限,而不需要为每个用户单独设置权限。

  2. 提高安全性:RBAC提供了细粒度的权限控制,确保每个用户只能访问其所需的资源和执行其所需的操作。这样可以避免用户滥用权限或访问未授权的资源,提高了系统的安全性。

  3. 提升系统性能:通过RBAC可以减少权限判断的复杂性,提高系统的性能。只需根据用户的角色进行权限判断,而不需要逐个判断用户的权限。

  4. 支持易于维护的角色管理:RBAC可以方便地管理角色和权限的关系,通过角色的继承和分配,可以灵活地管理用户的权限。当用户角色发生变化时,只需调整其角色的分配即可,而不需要修改每个用户的权限。

     

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

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

相关文章

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑净负荷均衡的分布式光伏集群电压调控策略研究》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

遗传算法理解与代码实战(二)- demo(python+deap)

前文介绍了遗传算法,并且手动python代码进行了实践,但是在遇到复杂的问题时(遗传算法理解与代码实战(三)会介绍),手写代码很麻烦,所以需要借助专门的遗传算法库来实现,这…

使用IAD电话交换机(语音网关)将电话外线对接到FreeSWITCH SIP服务器

在我们初步了解了FreeSWITCH这样的SIP服务器之后,常见的一个需求就是把真实的电信世界(比如固话、手机)对接到SIP服务器里。 今天我们就介绍一个简单的方法,在3分钟内就把电信局和你的SIP软交换机融合通信起来。 IAD和SIP服务器环…

Superset二次开发之Superset架构理解

技术框架 框架作用 前端 React构建用户界面的 JavaScript 库ReduxJavaScript 应用的状态管理库,管理组件间的状态共享Webpack前端资源打包工具BabelJavaScript 编译器D3.js数据可视化的 JavaScript 库后端 Flask轻量级的 Python web 框架,处理 HTTP 请求、路由以及其他 Web 服…

搜维尔科技:动作捕捉与数字时尚:Wondar Studios欧莱雅项目

来自意大利的Wondar Studios工作室,是一家制作与动作捕捉技术相关软件和内容的公司,其出品的三维角色动画均由专业动捕系统真实录制制作。 我们很高兴与大家分享Wondar Studios最新的动捕项目,该项目带来了身临其境的虚拟现实体验。他们与巴…

AI新工具 MacOS 翻译提供翻译、润色和语法修改功能的插件;AI生成 Excel公式;Deepmind前华人员工创建视频生成工具

1: OpenAI Translator Bob Plugin macOS 平台的翻译提供翻译、润色和语法修改功能的插件 OpenAI Translator Bob Plugin是一款基于OpenAI的API,为用户提供翻译、润色和语法修改功能的插件。这款插件专门为macOS平台上的Bob软件设计,通过使用先进的Chat…

fork属性的作用

在Maven中,fork属性是maven-compiler-plugin插件的一个配置选项。它的作用是控制是否为编译过程启动一个新的进程。当fork设置为true时,Maven将启动一个新的进程来执行编译,这允许你在本地的Java编译器之外使用其他Java编译器,例如…

矩阵键盘中为什么有键位并联二极管?

矩阵键盘上使用二极管主要是为了解决“幽灵键”(Ghosting)和“键盘冲突”(Key Jamming)问题,这两种现象在没有采取适当措施的矩阵键盘中很常见。 幽灵键现象 当用户在矩阵键盘上同时按下多个键时,由于电流…

笔试刷题记录(二)

数值操作类型转换 class CompareReference{public static void main(String [] args){float f42.0f;float f1[]new float[2];float f2[]new float[2];float[] f3f1;long x42;f1[0]42.0f;} }A f1f2 B xf1[0] C f1f3 D f2f1[1]BC正确,选项B解释,java核…

如何定义resultType和resultMap,它们之间的区别是什么?解释一下<parameterType>的作用和用法。

在MyBatis中,resultType和resultMap都用于将数据库查询结果映射到Java对象,但它们在使用方式和灵活性上有一些区别。 resultType resultType是一个简单的类型别名,它用于指定查询结果应该映射到的Java类型。当数据库表中的列名和Java对象的属…

设计模式-建造者模式实践案例

建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。当一个对象需要多个部分或许多步骤来创建,并且需要将创建过程与表示分离时,建造者模式非常有用。建造者模式旨在找到一个解决方案&…

C#使用泛型自定义的方法设计队列CQueue<T>类

目录 一、涉及到的知识点 1.C#中的队列类 2.自定义队列的方法 &#xff08;1&#xff09;先设计一个CList<T>类 &#xff08;2&#xff09;再设计CQueue<T>类 二、自定义队列CQueue<T>类的实例 一、涉及到的知识点 1.C#中的队列类 在C#中实现队列类&a…

数据仓库实战 第一讲

第一节 数据仓库的定义 数据仓库的优势 面向主题集成相对稳定反映历史变化 数据仓库的架构 特点 简单通过暂存区简化数据准备星型结构沙盒 &#xff08;提供专用安全区域&#xff09; 云数据仓库 特点 弹性&#xff08;高扩展性能&#xff09;简单易用易于管理节约成本…

线性代数的学习路线

线性代数是数学的一个重要分支&#xff0c;它主要研究向量空间和线性映射。学习线性代数的线索可以从以下几个关键点展开&#xff1a; 向量的内积&#xff1a;了解向量的内积概念&#xff0c;它是衡量两个向量之间关系的一种方式&#xff0c;可以用来计算向量的长度和角度。矩…

Git误操作补救错失:恢复误删的本地分支、将某个提交从一个分支复制到另一个分支

一、恢复误删的本地分支 作为一枚强迫症&#xff0c;没用的分支总是喜欢及时删删删删掉删掉统统删掉&#xff0c;结果今天发现有些分支还是应该保留。 比如&#xff0c;①前段时间切了个分支用来专门做图表&#xff0c;但因为需求还没有最终确定&#xff0c;已经上线了测试服而…

数据库-第八/九章 数据库编程和优化【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 文章目录 前言第八章 数据库编程8.1 嵌入式SQL8.2 嵌入式sql语…

Java实战:电商平台通用取货码设计

在电商平台中&#xff0c;取货码是一种常见的机制&#xff0c;用于验证用户身份并允许他们从仓库或商店取货。一个好的取货码设计可以提高用户体验&#xff0c;增强安全性&#xff0c;并简化物流流程。本文将深入探讨电商平台通用取货码的设计原理&#xff0c;包括安全性、唯一…

UE4 Niagara 关卡4.1官方案例解析

we now directly supporting playing audio from arbitrary locations in particle systems.users have control over volume and pitch,and the system can directly play sound waves,or sound cues which have multiple waves in them.(我们现在直接支持在粒子系统中从任意…

Python 过滤函数filter()详解

一、过滤函数定义 它用于对容器中的元素进行过滤处理。 二、 过滤函数语法 filter(function,iterable) 参数function&#xff1a;提供过滤条件的函数&#xff0c;返回布尔型 参数iterable: 容器类型数据 三、过滤函数的应用场景 1、筛选符合条件的元素 需求&#xff1a;在列表…

Paddle上手实战——NLP经典cls任务“推特文本情感13分类”

Paddle上手实战——NLP经典cls任务“推特文本情感13分类” 实战背景介绍 数据地址:https://www.heywhale.com/home/activity/detail/611cbe90ba12a0001753d1e9/content Twitter推文具备多重特性,首要之处在于其与Facebook的显著区别——其完全基于文本形式,通过Twitter接…