从零开始搭建企业管理系统(六):RBAC 权限管理设计

RBAC 权限管理设计

    • 前言
    • 权限分类
    • 功能权限设计
      • 什么是 RBAC
      • RBAC 组成
      • RBAC 模型分类
        • 基本模型RBAC0
        • 角色分层模型RBAC1
        • 角色限制模型RBAC2
        • 统一模型RBAC3
      • RBAC0 权限设计
        • 用户管理
        • 角色管理
        • 权限管理
        • 关联表
    • 总结

前言

作为一个后台管理系统,权限管理是一个绕不开的话题,一个成熟的后端系统离不开一个比较完善的权限管理系统,所以本小结我们根据 RBAC 思想来设计一下我们这个系统的权限管理。

权限分类

一般来说,我们常说的权限分为两种,一种是功能权限,一种则是数据权限。

  • 功能权限指的是用户登录系统后能看到什么模块,能看到哪些页面。
  • 数据权限指的是用户在某个模块里面能够看到哪些数据。

在这里插入图片描述

本系统目前只进行功能权限的设计,数据权限默认进行管控,先最小化功能实现,后面有需求在迭代吧。

功能权限设计

目前业界有很多关于权限系统的技术模型,常见的有ACL、ABAC、DAC、RBAC等等,不同体量的权限系统,我们可以参考不同的权限模型进行梳理和设计,本系统就采用一个经典的 RBAC 权限系统模型,我接触的系统基本上都是使用的 RBAC 模型,能满足绝大部分的需求。

什么是 RBAC

RBAC 模型(Role-Based Access Control:基于角色的访问控制)模型是比较早期提出的权限实现模型,在多用户计算机时期该思想即被提出,其中以美国George Mason大学信息安全技术实验室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公认。

RBAC 认为权限授权的过程可以抽象地概括为:Who 是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为Who、What、How的问题,Who、What、How构成了访问权限三元组,具体的理论可以参考RBAC96。

RBAC的权限授权其实就是Who、What、How的问题。

  • Who:权限的拥用者
  • What:权限针对的资源
  • How:具体的权限

RBAC 组成

RBAC模型的三要素为:用户、角色、权限。

  • 用户:是发起操作的主体,例如:后台管理系统的用户、OA系统的内部员工、面向C端的用户。
  • 角色:用于连接了用户和权限的桥梁,每个角色可以关联多个权限,同时一个用户也可以关联多个角色,那么这个用户就有了多个角色的多个权限。
  • 权限:用户可以访问的资源,包括:页面权限、操作权限、数据权限。

RBAC 模型分类

本系统使用 RBAC0 作为权限设计的方案,够用以及容易学习。

在RBAC中,根据权限设计的复杂程度,可分为RBAC0、RBAC1、RBAC2、RBAC3,我们就重点了解一下我们需要使用到的 RBAC0 模型就行,另外几种有兴趣可以百度一下。

基本模型RBAC0

RBAC0是基础,很多产品只需基于RBAC0就可以搭建权限模型了。在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。用户拥有的权限等于他所有的角色持有权限之和。

在这里插入图片描述

角色分层模型RBAC1

RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。

角色限制模型RBAC2

RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。

统一模型RBAC3

RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。

RBAC0 权限设计

通过上述分析,我们可以发现,设计功能权限离不开最基本的三要素:用户管理、角色管理以及权限管理;根据业务的不同,可能还会涉及更复杂的三要素:部门管理、职位管理、菜单管理等,当然我们使用 RBAC0 只涉及到用简单的3要素。

在这里插入图片描述

用户管理

为了便于大家理解,我们先参考一个优秀的开源框架 EL-ADMIN,给大家截点图理解理解。

在这里插入图片描述

可以很清楚的看到页面上的功能,我们的页面完成之后应该都是差不多的,并且还有一个部门管理,我们也可以有部门管理,但是不加入权限继承。

用户表设计:

字段类型含义
idbigint主键ID
usernamevarchar用户名
mobilechar手机号
avatarvarchar头像
emailvarchar邮箱
passwordvarchar密码
statusint状态 1正常 2锁定
is_deletedatetime是否删除
last_login_timedatetime最后登录时间
create_timedatetime创建时间
create_uservarchar创建用户
update_timedatetime更新时间
update_uservarchar更新用户
角色管理

在这里插入图片描述

上面说了我们的系统暂时是没有数据权限的实现的。

角色表设计:

字段类型含义
idbigint主键ID
namevarchar角色名称
remarkvarchar备注
statusint状态 1正常 2锁定
is_deletedatetime是否删除
create_timedatetime创建时间
create_uservarchar创建用户
update_timedatetime更新时间
update_uservarchar更新用户
权限管理

在这里插入图片描述

权限表设计:

字段类型含义
idbigint主键ID
pidbigint父菜单ID,一级菜单为0
namevarchar菜单名称
urlvarchar菜单URL
permsvarchar授权(多个用逗号分隔,如:user:list,user:create)
typeint类型 0:目录 1:菜单 2:按钮
iconvarchar菜单图标
orderint排序
statusint状态
is_deletedatetime是否删除
create_timedatetime创建时间
create_uservarchar创建用户
update_timedatetime更新时间
update_uservarchar更新用户
关联表

还有两张关联表需要设计,这两张表非常的简单,只有两个字段,分别是两个关联表的id,并且这两个字段都需要设置外键。

用户角色关联表

字段类型含义
user_idbigint用户ID(需要设置外键)
role_idbigint角色ID(需要设置外键)

角色权限关联表

字段类型含义
role_idbigint角色ID(需要设置外键)
menu_idbigint权限ID(需要设置外键)

ok,关于表的设计到这里就结束了,先简单的定了一个基础版本,后续根据开发需求慢慢的在维护修改吧。

总结

关于权限设计这一块,我们采用了 RBAC0 模型来实现,基本上中小型企业都是够用的了。而且简单易上手,学习难度不大,非常适合我们学习,下一小节我们使用 Spring Security 来编写具体的代码实现登录和授权功能。

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

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

相关文章

[Linux基础知识]页表

文章目录 1.页表 环境变量2.进程 1.页表 环境变量 一个分页存储管理系统中,地址长度为 32 位,其中页号占 8 位,则页表长度是 页号即页表项的序号,总共占8个二进制位,意味着页表项的个数就是2^8 在CPU和物理内存之间进行…

基于ssm高校教师科研信息展示网站论文

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师科研项目展示信息管理混乱,出错率高&#xff0c…

【23真题】难!最后的几所985!

今天分享的是23年天津大学815的信号与系统试题及解析!985的题目做一套少一套,考研前我也发不了几所985的真题了,大家珍惜! 本套试卷难度分析:22年天津大学815考研真题,我也发布过,若有需要&…

聚首引领行业风潮!聚首品牌联动资源价值平台发布会正式启航

2023年12月10日,由杭州建筑装饰学会、浙江聚首联优材料科技有限公司主办,天尚设计集团、公和设计集团、铭扬工程设计集团、地标设计集团、上宸工程设计集团、华坤建筑设计院、广厦建筑设计研究院、上海传承博华建筑规划设计院、航冠工程设计院、浙江鸿能…

SQL进阶 | CASE表达式

本文所有案例基于《SQL进阶教程》实现。 概述 SQL中的CASE表达式是一种通用的条件表达式,类似于其他语言中的if/else语句。它用于在SQL语句中实现条件逻辑。CASE表达式以WHEN子句开始,后面跟着一个或多个WHEN条件,每个WHEN条件后面跟着一个TH…

【S32DS RTD实战】-1.3-S32K3工程生成S19,BIN,Hex文件,以及Post-build steps的妙用

目录 1 方法一:逐个生成Motorola S-record(s19,srec…),Intel HEX,Bin文件 1.1 生成Motorola S-record(s19,srec…)文件 1.2 生成Intel HEX文件 1.3 生成Bin文件 2 …

关于 SAP S/4HANA 中的控制您应该了解什么-Part1

原文地址:What you should know about controlling in SAP S/4HANA. (Part 1) | SAP Blogs (自 SAP S/4HANA 版本 1909 起更新) 作为一名CO顾问,我对 SAP ERP 中央组件 (ECC) 向 SAP S/4HANA 的演变感到非常兴奋。 自从第一个版…

深入理解JVM虚拟机第二十八篇:详解JVM当中方法重写的本质和虚方法表

😉😉 欢迎加入我们的学习交流群呀: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群&a…

Unity中结构体定义的成员如何显示在窗口中

在Unity中,有时候我们在处理数据的时候会用到结构体定义一些Unity组件相关的数据成员,并且需要在编辑器中拉取对象赋值。比如: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;publ…

正则表达式(9):扩展正则表达式

正则表达式(9):扩展正则表达式 小结 本博文转载自 前文中一直在说,在Linux中,正则表达式可以分为”基本正则表达式”和”扩展正则表达式”。 我们已经认识了”基本正则表达式”,现在,我们来认…

笔记本电脑安装了Ubuntu系统设置关盖/合盖不挂起/不睡眠

文章目录 简介通过gnome-tweaks设置通过更改登录配置文件logind.conf设置参考资料 简介 学习工作中需要用到笔记本安装Ubuntu Linux系统,并且需要关盖电脑不关机、不挂起且不睡眠。为此,本篇博客整理了两种常规操作方式,并给了详细的步骤&am…

windows10安装MongoDB的入门简易教程【学习自用】

一、下载安装包 下载地址 https://www.mongodb.com/try/download/community 因为我是在windows上安装,所以下载windows版本的压缩包格式 二、下载后解压到要安装的目录里去 我这里在D盘装,所以就解压到D盘中我自己建的的mongoDB文件夹中。 三、在解…

网络安全攻击预警/态势预测算法汇总

总结: 网络安全攻击预警/态势预测算法众多,主要包括: 基于统计学的算法:协方差矩阵、马尔可夫模型等; 基于机器学习的算法:贝叶斯网络、聚类算法、支持向量机SVM、遗传算法、层次分析法AHP、决策树等&am…

LeetCode 每日一题 Day 10 || 并查集/二分搜索

1631. 最小体力消耗路径 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注…

案例056:基于微信小程序的购物系统

文末获取源码 开发语言:PHP 框架:Think PHP 数据库:mysql 5.7 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者工具 目录 前言 系统展示 后台模块的实现 用户信息管理 商品信…

USB Type-C一拖二线缆制作方法

1 实现方法 Figure 1-1 Type-C Socket(母口) Figure 1-2 Type-C Plug(公头) Table 1-1 Type-C Socket Pin连接描述 Type-C Plug连接, 需要做一个一拖二的线,一根的一端是USB, 另外一根的一端是USB转UART, 参考Table 1-2。 Table 1…

windows MYSQL解决中文乱码问题

1.首先确保你已经把mysql配置了环境变量 2.打开window终端 3.输入mysql -u root -p 4.输入密码,就是安装的时候设置的root超级管理员权限密码 5.输入: SHOW VARIABLES LIKE ‘character%’; 出现上图,说明就会出现中文乱码问题。 6.该怎么办…

31、卷积 - 参数 dilation 以及空洞卷积

在卷积算法中,还有一个不常见的参数叫做dilation(中文:膨胀)。 很多同学可能没听说过这个参数,下面看看这个参数有什么作用,用来控制什么的。 我们还是放这个经典的卷积运算图,图中是看不出 dilation 这个参数的存在的。 如果再换一张图呢,发现两图的区别了吗? 没错…

JavaDay17

创建不可变集合 import java.util.Iterator; import java.util.List;public class Test {public static void main(String[] args) {/*创建不可变的List集合* "张三" "李四" "王五" "赵六*///一旦创建之后 是无法进行修改的 在下面的代码…

[Linux] nginx防盗链与优化

一、Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度 vim /usr/local/nginx/conf/nginx.conf http { .…