基于RBAC模型的权限处理与MySQL建表

本文探讨了RBAC模型的四种类型:RBAC0、RBAC1、RBAC2和RBAC3,以及如何根据项目需求选择合适的权限模型。此外,还介绍了在RBAC模型下,如何使用MySQL进行权限相关的五表设计,包括用户表、角色表、权限表及它们之间的关联表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎光顾我的博客

开端

这次我们来讲一讲 RBAC 模型的权限处理,以及基于这个模型我们该如何设计数据表。我在刚做项目的时候其实完全没有考虑到这块内容,我觉得权限只要一个用户一个角色,前端根据用户登录时获取到的角色信息进行接口的放行或者禁止就可以了。仔细想一想确实有很多漏洞,比如我直接使用 Postman 对一些需要权限才能调用的接口进行访问等等;再比如我的 token 是前端直接生成的,而没有利用 session、cookie 等技术,如果有人直接往自己浏览器的 sessionStorage 里存一个管理员 token 不就可以获得最高权限了吗,这显然是不可取的。

权限,应当是一个系统最先进行考虑的,之后才是在权限的基础上 CURD CURD CURD 。。。我们先来看看对权限模型的思考吧。

解析

接下来进入正题。

权限模型

首先来分析一下我们目前比较常用的一些权限模型。

传统权限模型

一般来说的传统权限模型并没有什么复杂的内容,就是我开头讲到的最基本的用户和权限之间的绑定。我数据库里存了三个用户,那么给每个用户都分配各自的权限。但是业务复杂起来,用户多起来之后就会发现问题了。这样的方式绑定权限,删改不够灵活。用户不可能每个人的权限都各不相同,总有一些相同类别的用户,他们需要相同的权限。比如说管理员老王和其他管理员都要拥有系统所有的权限,这样才能方便测试接口,如果管理员都没有权限,这个操作还有什么意义。

再比如吃瓜群众这类人,他也就只能登陆系统查查基本的数据,对于修改尤其是添加和删除是完全没有任何权限的,修改也仅限于自己的头像啊密码啊什么的。那当一类人到达一定基数的时候,我们是不是可以将他们的角色给抽离出来,独自形成一层。这就是我接下来讲到的 RBAC (Role-Base Access Control)。

RBAC0 权限模型

按照英文来解释,就是基于角色的权限控制。所以显而易见,他在传统的权限模型里又加了角色。我们在传统模型中是直接将权限赋予用户。而在这个模型中,现将权限赋予角色,再把角色赋予用户,这样的分层是不是就更加清晰了。就和学校里一样,校领导管一批院领导,院领导管各自的年级专业,每一个年级专业再分班分学号给每一位同学。和我既是属于计算机专业的,又是属于机电系的是一个道理。

但是我这个图其实还有点问题,大家可以发现我画的每一个用户只对应了一个角色,在实际操作中往往是用户和角色之间是一对多的关系,而且同一角色内部也有细分。试想一下,如果老王和老贾都是管理员,但是老王等级更高一些。老贾只是个新来的,但是他们所拥有的权限是一样的。老王是不是就有意见,万一哪天老贾一个删库到跑路把锅甩给老王那可咋办?所以接下来又在这个基础上派生出几个不同的权限模型。

RBAC1角色分层模型

为了解决老王内心的不愉快,我就只能给管理员分成两个等级,其他角色也同样操作。这样一来,我可以通过同一角色之间不同等级的权限分级,给他们分配不同的权限。换一种角度来说这其实和多分配了几个角色没有区别,但是给角色分级之后同一角色不同等级之间耦合度更高一些,可能只有少数权限不相同。

随着角色的增多,分级的增加,问题又来了。吃瓜群众中奖被选为我们软件的内测人员,终于可以从普通低级用户变为低级检错员了,但是他作为普通用户的一些权限仍旧保留,那该怎么办?所以接下来又有一种权限模型的想法诞生了。

RBAC2 角色限制模型

这种模型比较难用图来表示,简单的来说就是可以限制一个用户拥有多个角色的时候只能同时激活一个角色,或者用高级的角色包含住低级的角色,然后规定用户必须从低级角色升级到高级角色,仅保留高级角色的权限。完全应用这种模型的场合并不太多。

RBAC3 统一模型

RBAC3 = RBAC2 + RBAC1

这种模型是前两种的结合体,相对来说更加复杂,很少会考虑这么做,就不多赘述。

模型的选择

其实对于一个系统来说,权限是根据需求来定的,并不是一定要按照上述的几种来写,每

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值