自定义RBAC(3)

news2024/12/24 10:56:58

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~

RBAC类型的权限,本质上是一种对资源访问路径的控制,且具有典型的树型层次结构。而树型结构,天然地就有父结点和子结点的关系以及区别。就像前面展示过的业务系统的树型结构:

 

从我个人的开发经验来看,在大多数情况下,数据库的权限表可以这样设计:

 

这也算是抛砖引玉吧。

和普通的表结构一样,将主键设为自增编码。这种方式的优点是便于操作和实现。

缺点是在设计数据库表结构时不便于观察各节点之间的联系,因此就出现了一种能够让主键携带更多信息的编码方式:

 

其实我们每个人的身份证的前六位就是一种最常见的「占位符」编码,例如「420」开头的身份证就都是湖北省的。

利用编码中的占位符来代替单纯的数字这么做的底层逻辑是:

1、所有层级为「1」的大类按照自然数的编码顺序依次递增

2、所有编码,都从「1」开始计数,如1、1010000、1010100、2010000

3、从层级为2的权限开始,编码为7位数,例如:1010000

4、编码第一位(1):占位符,表示业务编号,与大类的业务编码对应,每个占位符都可能有99个直接子类

5、编码第二、三位(01):表示层级为3的儿子权限,从01~99,可以有99个儿子

6、编码第四、五位(00):表示层级为4的孙子权限,从01~99,可以有99个孙子

7、编码第六、七位(00):表示层级为5的曾孙权限,从01~99,可以有99个曾孙

这种编号方式能很清晰地看出层级结构,但如果需要无限扩展层级结构时就无能为力。自增方式可以很方便地实现无限扩展,但编号却毫无规律,不容易看出层级关联。

所以,如果层级不多,建议使用占位符方式,反之利用自增方式。一般来说权限数据相对比较固定,极少改动,因此可以使用MyISAM的存储引擎,且事先可以以初始化的方式创建较为完整的权限数据。

从上面的过程可以看出来,权限设计其实是一件比较抽象的思考活动。有时候一些复杂的权限、角色、组织、用户等内容交织在一起,会让人觉得无从下手。其实只要通过适当的方法来解构,就可以更好地理解了。例如:“汉堡包”法。

顾名思义,就是能像汉堡包那样直观、清晰地了解权限系统所包括的内容。

 

“汉堡包”上层的组织结构可能是这样的:

 

“汉堡包”下层的权限集合则可能是这样的:

 

而汉堡包中间的分组&角色则可能又是这样的:

 

如果要搞权限叠加的话,嗯~~~,是这样的:

 

这里把和权限进行连线的图省略掉了,因为实在是太~过~复~杂~了~~,完全不是人看的玩意。

所以呢,对于刚开始接触权限系统的初学者,也不要被吓到了,完全可以通过这种方式进行思维训练,来一步步熟悉:

1、先明确委托方的组织架构图,设计出上层汉堡包

2、再依据业务需求细化出系统的功能权限,设计出下层汉堡包

3、结合业务要求,再在中间填充各类角色及分组

4、最后将它们用线条关联起来

5、熟练以后,就不用再在纸上或者绘图软件中画出来

6、只需在脑子里就可以勾勒出来整个权限系统的轮廓了

可能有些同学会有一个疑问:为什么在parentids字段中的值,结尾都要加个「,」?

答案就在执行SQL时。

例如,查找id=1的所有子类

有「,」:SELECT * FROM sys_permission WHERE parentids LIKE '%1,%'

无「,」:SELECT * FROM sys_permission WHERE parentids LIKE '%1%'

可以比较一下查询结果会有什么不同。

当然,互联网的业务的MySQL中是不允许出现LIKE查询的,这一点多插一句嘴。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

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

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

相关文章

【HarmonyOS】ArkTS Native开发——使用 system函数创建文件

ArkTS是HamronyOS优选的主力语言,但官方文档指南中对于Native应用开发并没有详细的描述,只有一篇Codelab可以学习(简易Native C 示例(ArkTS) (huawei.com)),本文将在Native应用中使用C/C的syste…

计算机毕业设计ssm+vue基本微信小程序的早茶预定系统 uniapp 小程序

项目介绍 本文介绍了使用微信小程序技术开发早茶预定系统的设计与实现过程,首先对实现该系统的技术进行分析,说明选择Java后台技术和MySQL数据库的必要性,然后对基于微信小程序的早茶预定系统的需求进行分析。并接着对系统进行设计,包括架构设计、功能设计、数据库设计。最后进…

关于商业智能 BI 认知上的误区,你有几个

关于商业智能BI的介绍,网络上有太多的杂音,总而言之会把商业智能BI讲解的貌似很简单,感觉上买了一个工具就可以解决所有的问题,这其实是一个非常大的误区。 商业智能BI - 派可数据商业智能BI可视化分析平台 我这里总结了一下&…

宠物店微信小程序开发步骤_宠物店管理系统用什么做

大多数人对于动物医疗专业知识比较匮乏,再加上宠物医疗费用,日常用品都略高,宠物店/宠物医院的前景,再未来依旧可观。 相比于实体店,线上平台无疑有着更广阔的拓客渠道和销售前景,做宠物店/宠物医院小程序…

如何高效制作数据可视化大屏,大屏高效制作攻略分享,总有一款适合你

做数据可视化大屏可不是一件简单的事情,里面有很多技巧,像布局,配色,图表和素材的选用和搭配等等,里面有很多学问。一时半会也做不出一个大屏,即使你会做也需要一定的时间和精力,在大量的需求下…

ABAP学习笔记之——第十一章:Function ALV

一、Function ALV Function ALV 从名字中可以推出,是由 Function(函数)形式提供,因此开发者只需适当使用以有的功能即可。没有必要创建屏幕也没有必要一一写出代码,因此可认为是生产性比较高的方法。 例: *function ALV GRID和…

【测绘程序设计】——大地坐标与空间直角坐标转换

本文分享了 测绘程序设计——大地坐标(B,L,H)与空间直角坐标(X,Y,Z)转换(C#版与Python版),相关源代码(绝对完整,直接运行)与使用示例如下。 目录 Part.Ⅰ 使用示例Chap.Ⅰ C#版Chap.Ⅱ Python版Part.Ⅱ 代码分析Chap.Ⅰ C#版Chap.Ⅱ Python版Part.Ⅲ 源码下载Part.Ⅰ…

12.9 总结

一.复制带有随机指针的链表 要求结构和val都是一样 这个题目我们可以建立一个map表,把新的链表和旧的链表每个节点都构成一组key-val对应 然后遍历旧链表.找到对应的next值和random值 思路: 方法1:迭代map class Solution { public Node copyRandomList(Node head) { if(hea…

Mysql 8.0.31彻底卸载

我们有时需要将mysql卸载重新安装,然而如果不注意其中的细节,只是使用apt remove mysql-server命令是卸载不干净的,即使使用了apt purge mysql-server命令进行卸载再重新安装的mysql还是会保留着原来的密码。正确的操作方式是下面这样子的。 …

百度智能云发布基于Ampere® Altra®的高能效云服务器GR1实例

2021年,百度公布了2030年碳中和目标以及6条科学实现路径。首要举措便是建设更环保的数据中心。百度自建的数据中心PUE一直处于非常领先的位置。百度一直秉持“科技为更好”的可持续发展理念,依托全栈和领先的人工智能技术和丰富的产业实践,在…

前端项目工程化流程(简陋版)

背景 最近想要自己做开始一个项目,然后发现好像挺久没有出 从 0 开始 一个项目了,对项目的一些工程化方面的流程有点生疏了,感觉就是知道一个大概的流程,很多都要靠搜索引擎来帮忙,我就想整理一下,对于前端…

在node.js中使用​ JsonWebToken模块进行token加密

目录 一、token 1、什么是token 2、作用 二、Express中实现token的方法: 1、使用JWT模块:JsonWebToken 2、token验证的流程 3、Express中实现过程 ​ (1)安装、导入JsonWebToken模块 ​ (2)在登录…

stm32f767之PWM

仅作笔记,很多内容参考网友文章。 PWM 输出,是利用定时器的比较输出功能,所以就是配置定时器。 1,选择定时器8 tim1和tim8为高级定时器 一般我们选择内部时钟,也就是由APB 外设时钟提供。根据选择的输出IO口&#x…

手把手教你搭建视频去重系统

#01 背景 如今,短视频平台对各类搬运视频的检测力度和精确度越来越高了。无论是影视号的剪辑,还是从油管搬运,即使做了各类复杂的视频变换,都很容易被检测出来。作者都会收到提醒,严重的甚至被封号。 乔布斯演讲原始视…

您公司的财务流程是世界一流的还是二流的?

您公司的财务流程是世界一流的还是二流的? 组织开始意识到,提高财务和会计流程的有效性和效率不仅是财务部门内部的目标,而且对整个公司的战略目标也意义重大。首席财务官必须扪心自问——我们的财务流程是世界一流的还是二流的,…

Mac安装NDK android-ndk-r25b-darwin.dmg

文章目录废话连片教程片段1. 打开要存放的目录.2. 打开 .app 的包内容配置环境变量 MAC (在终端/cmd/命令行中运行)废话连片 最近在用 xx存图 下载 小蓝鸟、油管 视频, 一开始觉得挺好用的, 直到… 免费下载次数已用完. 就想着自己弄一个下载视频的小工具, 便查询到了 python …

基于JavaWeb的宿舍管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

网页设计期末课程大作业:基于HTML+CSS+JavaScript+Bootstrap制作响应式网站信息技术交流博客(7页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

gradle的访问目录和支付宝的注意事项

经过我100多次的测试发现。gradle项目不管是打包 还是不打包。他的访问目录都是 config.class.getResourceAsStream("config.properties") 当前class所在的目录, 而支付宝的sdk。他的访问文件的目录是项目的根目录。 比如 你的项目文件是这个样子。运…

QT-自定义本地翻译模块,简单实用

QT-自定义本地翻译模块,简单实用前言一、演示效果二、核心模块1.本地xml的操作过程2、翻译模块三、程序链接前言 QT的国际语言每次如果有字符串变动,都需要重新再编译一下,真的是顶不住,说实话,用起来真的是不习惯。 …