大话《权限设计》全篇,领略不同设计模式的魅力

news/2024/12/16 13:46:22/文章来源:https://www.cnblogs.com/cyzf/p/18609903

说明

    该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。

    该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。

    说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。

友情提醒:本篇文章是属于系列文章,看该文章前,建议先看之前文章,可以更好理解项目结构。

qq群:801913255,进群有什么不懂的尽管问,群主都会耐心解答。

关注我,学不会你来打我

注意:该文章是理论篇,后面会有开发的全过程。有兴趣的朋友,请关注我吧(*^▽^*)。

01 系统权限的划分

通常来说,一个系统权限的划分,主要分位2大类:功能级权限和数据级权限。那么它们是如何分类的,我们看下图。

从上图可以看出。功能级权限和数据级权限的区别在于它们对权限划分的颗粒度不同。功能级权限:就像它名字一样,更多偏向于功能方面的权限控制。数据级权限:更多的偏向于数据方面的权限控制。

02 权限的设计模式有哪些

  了解了一个系统的权限划分后,那么我们要如何去规划,设计这些权限。尽量减少系统权限的维护成本和权限的耦合度。是开发人员一直面临的严峻问题。

据我的了解,目前比较流行的权限设计模式有以下四种。

通过上图,我们可以了解到权限的设计模式分为那四种,那么接下来我们就用《小说》的形式,分别讲一下这四种模式的使用场景及实现过程。

03 ACL基于用户的权限设计

  乘风是一家创业公司的开发人员,由于是创业公司,规模不大,研发人员也只有可怜的3人,平时面临的研发任务非常紧张。某天的傍晚,乘风狠狠地伸了个懒腰,环顾四周空荡荡的座位。正准备收拾东西回家的时候,老板叫住了他。小乘,怎么财务的小红能看到运营的数据,可以让不同的人查看不同的数据嘛。乘风的老板也不怎么懂技术,需求就说了一句:让不同的人员看到不同的数据。乘风自信的回答道:可以的老板。第二天,乘风就根据老板的需求基于ACL整理出了一套权限管理的方案。

以上就是乘风基于ACL设计的权限。可以看出菜单和人员直接挂钩,可以简单有效的做到每个员工访问不同的菜单,从而实现老板的需求。

04 RABC基于角色的权限设计

4.1角色权限

  随着时间的推移,公司也处于快速发展阶段,终于在2年后的某一天。公司老板找到已经是研发组长的乘风说道:小乘啊,今天早上运营给我说,他们现在每天花在分配人员权限上的时间过多,每次有人员变动、人员加入都需要重新调整权限,而且不能成批量操作,大大降低了他们的工作效率。你看有什么办法解决这个问题没有。

  乘风一听,毫不犹豫的说道。有的老板,明天我给你出一个方案。

  老板一听很高兴,拍了拍乘风的肩膀离开了,他非常欣赏乘风这种办事风格,干净利落,总能解决问题。

  乘风的自信来源于他一复一日的学习和专研。他明白用RABC就能完美解决老板的需求。于是他在第二天就做出了如下方案设计

  上述2张图它的授权结果是一样的,但是很明显基于RABC的授权方式更加灵活。原因在于乘风在人员和权限之间抽象出一个角色层,这样不仅能减少系统之间的耦合,还能大大降低运营人员的运维时间。

  为什么这么说,举一个简单的例子:当【权限4】这块权限不想让任何人使用,那么在RABC中,我只需要把它从【角色3】中移除即可。反观ACL就比较麻烦,需要先后移除人员1和人员3的权限。试想一下这是3个员工,如果是10个100个,得有多麻烦。

  很快乘风的方案得到了老板的肯定,并且给他升职加薪。

4.2 角色等级权限

  这种设计模式很快就实现并用于系统之中,也确实大大解决了很多实际性问题。然而好景不长,公司在接下来的时间中,发展的越来越快,规模越来越大。这种设计方式也出现了和ACL同样的问题。当用户权限分的很细的时候,几乎每个用户都对应一个角色。似乎又回到了几年前ACL设计模式的样子

  于是乘风通过不断地对系统的分析和对技术的专研,希望能从其中得到有效的解决办法。

  可能是日有所思,夜有所梦。在某一天的晚上,乘风在睡梦中得到了解决办法。他梦见。。。把之前设定的角色制定了等级。也就是说高等级的角色会继承低等级角色的所有权限。

  得到答案的乘风,也不困了,来不及穿衣服裤子。就这样穿着一条大裤衩打开电脑,画出了如下设计方案。

 

你没看错,其实就是和组织机构类似,那么我们如何实现呢?请看下图

  可以看到【角色1-2】它是继承了【角色1-2-1】的所有权限。根据这一原理,我们不用在为【角色1-2】单独在赋予权限3和权限4。

  啊嚏,乘风摸了摸鼻子。一个喷嚏让他在意识到自己全身上下就只剩一条大裤衩。看着设计方案乘风淡淡的说了一句。

  难道我真的是天才?随后就进入梦乡。

05 ABAC基于属性的权限设计

  岁月悠悠,人生如梦,转眼间又过去了几年。乘风也不再年轻,不是当前刚进公司的小白,但也正是如此。他仿佛失去了当年对技术的向往和专研热情,因为他总觉得自己的技术已经处于很高的水平。直到有一天,老板又找到了他。

  小乘,老板推开乘风的办公室,见乘风正在泡茶,眉头稍稍一皱,但随后很快就消失。

  老板,乘风没有发现老板的异常,起身道

  小乘,昨天我去财务部视察的时候发现,财务部的小李居然能看到我们公司所有员工的工资。按道理说除了财务经理有权限查看之外,财务部下面的人应该都不具备查看员工工资的权限。

  还有人事部的小张,他怎么能随意查看公司领导层的人事资料,甚至能随意修改,这不是胡闹嘛?

  你是研发部的负责人,你应该考虑考虑,系统的数据安全,那写人能看什么数据,能修改什么数据,要做到可调控。

  接下来的时间中,乘风老板和他聊了很多。大多数都是围绕数据安全的问题展开。

  对了,你的茶具还挺全,整的不错。走到门口的老板,忽然转身对乘风说道。

  老板最后的话,让乘风陷入了深深的沉思之中。

  回忆过去自己,从一开始的积极提升能力到如今的懈怠、自满,内心有一种说不出的感觉。

  今天老板的话,让他意识到很多。总结后的乘风,下定决心要找回自己,然后根据老板简述的需求,总结如下

1:不同的人需要查看不同的数据,做到可调控。

2:不同的人对数据有不同的操作权限,做到可调控。

 

  这些问题的出现,让乘风很是头疼,不知从何下手。于是他仿佛回到过去的自己,努力查阅资料,提升技能。

  终于得到了一个有效的解决办法。那就是ABAC基于属性的权限设计也就是说ABAC可以通过动态计算一个或者一组属性来进行权限控制。

  那么ABAC属性大致分位哪些?

  得到答案的乘风,马上着手设计ABAC基于属性的权限设计。很快就完成权限系统的迭代。

  随着了解的越多,乘风也开始总结自身存在的问题。之前哪点对自己技术的自信,现在看来就是自负和自满。技术没有顶峰,只有不断的求知、探索。

06 RABC+ABAC的权限设计

  这个不必多说,就是字面的意思。我们的OverallAuth2.0就使用RABC+ABAC的权限设计。

 

以上就是本篇文章的全部内容,感谢耐心观看

后端WebApi 预览地址:http://139.155.137.144:8880/swagger/index.html

前端vue 预览地址:http://139.155.137.144:8881

关注公众号:发送【权限】,获取前后端代码

有兴趣的朋友,请关注我微信公众号吧(*^▽^*)。

关注我:一个全栈多端的宝藏博主,定时分享技术文章,不定时分享开源项目。关注我,带你认识不一样的程序世界

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

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

相关文章

LLM应用实战-财经新闻自动聚合

开发了一款新闻资讯的自动聚合的工具,基于crawl4ai框架实现。1. 背景 这段时间项目比较忙,所以本qiang~有些耽误了学习,不过也算是百忙之中,抽取时间来支撑一个读者的需求,即爬取一些财经网站的新闻并自动聚合。 该读者看了之前的《AI资讯的自动聚合及报告生成》文章后,…

减少延迟时间的方法

减少延迟时间的方法 ‍ ​​ ‍一、回顾 重点:延迟时间就是磁头在某一磁道上开转的时间 盘片一直在旋转个不停 机械硬盘的数据读取以一个扇区为单位 物理上相邻的扇区并不能连续读数据,因为磁头读入一个扇区的数据后还需要一小段时间来处理,并不能紧接着读取相邻的扇区的数据…

Win电脑端有什么好用的备忘录便签推荐?

一、sticky notes 中文名叫便笺,就是Windows电脑系统自带的便笺,打开即可直接使用,无需安装。 它是一个一个彩色便利贴形式展现的,可以记录文字、添加图片,适合记录一些简单的信息。 不支持一直悬挂在电脑桌面上显示,也不支持设置提醒时间,想要同步到手机端使用,也有点…

设备的分配与回收

设备的分配与回收 ‍ ​​ ‍一、设备分配时的考虑因素 ​​ (一)设备的固有属性独占设备:一个时段只能分配给一个进程(如打印机) 共享设备:可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。 虚拟设备:采用 SPOOLing 技术将…

GitHub项目迁移到GitLab

GitHub项目迁移到GitLab 1.克隆GitHub项目到本地 [root@gitclient ~]# mkdir gitrepos [root@gitclient ~]# cd gitrepos [root@gitclient gitrepos]# git init . hint: Using master as the name for the initial branch. This default branch name hint: is subject to chang…

极狐GitLab 正式发布安全补丁版本 17.6.2、17.5.4、 17.4.6

本分分享极狐GitLab 补丁版本 17.6.2, 17.5.4, 17.4.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何措施。 参考资料GitLab 专业升级…

IO应用程序接口设备驱动程序接口

IO应用程序接口&设备驱动程序接口 ‍ ​​ ‍一、输入/输出应用程序接口 背景:在设备独立软件层向上提供各种各样的输入/输出应用程序接口的原因是: 用户层的应用程序无法用一个统一的系统调用接囗来完成所有类型设备的 I/O ​​ ‍ 三种输入/输出应用程序接口:字符设备…

IO核心子系统

IO核心子系统 I/O 核心子系统要实现的功能就是中间三层要实现的功能。 前言:本节仅作介绍和导学,主要列举 I/O 子系统实现的相关功能,详细跳转至各对应节 ​​ ‍​​ ‍ 一、I/O 调度 用某种算法确定一个好的顺序来处理各个 I/O 请求。(类比进程调度) 如:磁盘调度(先来…

【日记】天气好好,然后打了两天游戏(562 字)

正文昨天和今天打了两天游戏,笑死。黑神话发布更新了,多打了几次虎先锋,今天晚上才过了二郎神。二郎神是真难啊。不过之后的法天相地战也是真帅啊。幸好之前没有看攻略被剧透一脸。除此之外好像就没做什么了。太懒了。中午吃饭,店家问我在读书还是工作了。后面我们聊起来。…

如何让 localStorage 数据实现实时响应

重大事项 📣 :重大事项提前通知!快来围观,不容错过! 极限科技 一直致力于为开发者和企业提供优质的开源工具,提升整个技术生态的活力。除了维护国内最流行的分词器 analysis-ik 和 analysis-pinyin,也在不断推动更多高质量开源产品的诞生。 在极限科技成立三周年之际,…

loadSend:免费开源局域网数据传输工具 全平台支持 传输工具

前言 不同系统的电脑、手机,文件传输有没有简单一点的方法? 手机是iPhone,电脑是Windows,如何更快捷传输文件呢? 我们最常用和用得最多的文件传输工具可能就是微信以及 QQ 了吧! 其实,如果只是在局域网内,用微信这一类聊天工具来传输文件并不算特别合适,除了可能存在的…

焦作本地在线教育系统价格

近年来,在线教育的普及使得传统教培模式受到了新的挑战。无论是大型教育集团,还是地方性的教培中心,纷纷转型线上,寻求更为灵活的盈利方式和发展机遇。在众多竞争者中,了解并运用合适的在线教育系统对维持市场地位至关重要。图源 凸知@www.tuzhi.ltd对于许多像焦作地区教育…