从零开始搭建企业管理系统(六):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 来编写具体的代码实现登录和授权功能。

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

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

相关文章

idea__SpringBoot微服务09——员工管理系统,(Springboot解决乱码),thymeleaf语法,404页面。

员工管理系统 完整项目地址:一、首页实现(注意的点)二、国际化三、乱码解决四、登录功能实现(注意的点)五、登录拦截器(注意的点)六、展示员工列表(注意的点)1、前端页面…

【每日一题】—— B. StORage room(Codeforces Round 912 (Div. 2))(位操作符)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

9.静态路由

静态路由 中小型网络都会用到,防火墙核心交换机用的很多,一般是用在出口 路由表:路由器用来转发数据包唯一的依据 NextHop下一跳 Static静态路由需要手动设置 ip route-static 目标网段 掩码 下一跳例如:ip route-static 192…

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本,然后点击“启动 MetaHuman Creator” 等待一段时间后,在如下页面点击选择一个人…

程序员所需要的思维方式

# 程序员所需要的思维方式 ## 人与人最大的差距在于大脑 人与人最大的差距在于大脑。一个人不太可能吃别人饭量10倍的饭,也不太可能搬的起别人10倍多的砖,但是思考的速度和深度却差距非常大。花一秒钟就看透事物本质的人,和花一辈子都看不清的…

Tr0ll

信息收集 探测主机存活信息: nmap -sn --min-rate 10000 192.168.182.0/24Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-14 15:45 CST Nmap scan report for 192.168.182.1 Host is up (0.00026s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…

STL源码剖析笔记——仿函数(函数对象)

系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack,queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

​SSD在AI发展中的关键作用:从高速缓存到数据湖-2

二、大规模长期存储数据湖 大规模数据集: AI应用需要处理大量的数据,这些数据可能来自多个来源,包括图像、视频、文本、音频等。为了有效地管理这些数据,组织通常将其存储在大型的数据湖中。 容量扩展: 由于数据集的…

宏景eHR SQL 注入漏洞复现(CVE-2023-6655)

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR 中发现了一种被分类为关键的漏洞,该漏洞影响了Login Interface组件中/w_selfservice/oauthservlet/%2e../.%2e/genera…

分配栈空间的三种方式(基于适配qemu的FreeRTOS分析)

1、定义全局的数组 定义的全局数组属于bss段,相当于把bss段的一部分作为栈空间,栈空间的大小就是数组的大小如果把栈空间放在bss段,则在bss段清零时会多清零一段地址空间 2、在链接脚本中指定 用链接脚本在所有段的后面增加stack段&#xff…

消费增值:一种改变消费观念的新模式

据统计,全球电子商务市场在过去的五年内以每年20%的速度增长,预计到2025年将达到5.5万亿美元。然而,在这个庞大的市场中,消费者在购物后往往只获得了商品或服务本身,而没有获得更多的附加价值。为了改变这种消费观念&a…