00:01
嗯,大家看我们下一步呢。是要做做这个角色的维护。角色的维护。嗯,其实我从这打开看吧。角色的维护他的数据其实很简单。角色这个表只有一个名称,一个ID。就没别的了。这个数据很简单,也是增长改查,但是现在的问题是,到底说啥是个角角色。啊,这个念角色,这不是角色啊。啥是角色,哎,这个东西呢,是我们权限控制的一部分,所以说呢,我们做这个之前,咱们得先了解了解什么叫做权限控制。哎,什么叫做权限控制啊,我们,嗯,什么叫RBAC权限控制模型。
01:05
哎,首先呢,咱们先提出这样一个问题。为什么要进行权限控制?如果不进行权限控制,我们系统当中没有这个。这个这一层啊,没有权限管理,这个系统的功能就完全不设防,全部暴露在所有用户的面前。啊,谁都是想访问什么就访问什么,没有任何的限制。用户登录以后可以使用系统中所有的功能。这个是我们实际运行的时候是不可能接受的。比如说你有一个人事档案管理系统。有这个人力资源部的同事,有这个其他部门的普通的同事,如果没有权限的话,这个其他部门这个人登录进来以后,他就可以去看别人的工资。他一看,有一个人每天来的比他晚,走的比他早,每天在那上班,就是摸鱼,完了挣钱比他多好多。
02:03
这不就出问题了吗,是吧?就是这种事儿不能不能让他看到这条记录是吧,这个事儿可以有啊,因为那个人是老板的小舅子是吧。那这你上哪说理去是吧,所以说呢,不让你看到是对你的保护对吧,哎。是的,你这个省得你这个这个这个嗯,生气把身体气坏了不好是吧,哎。所以说呢,不允许这样的啊,甚至于说他登录到这系统里边以后,把他自己的这个工资给后边小数点往后挪了一位是吧。啊,所以说你看孙猴是吧,孙悟空是吧,进了地府以后,把他自己的生死簿给改了,对吧。啊,他把从里边给勾掉了没有没有没有,他生死簿其实不就是一个大型的一个数据库系统吗。对吧,他去里边他把这个,他把他自己那条记录删了啊,他从此就逍遥天地了是吧。
03:02
有一篇有一篇微信公众号的文章呢,就分析哈,如生死簿的话,这是一个,这是一个非常庞大的一个信息管理系统,而且它的这个访问量,系统的这个负载会非常的这个非常的大。你想咱就不说别的哈,就是地球的范围内,这个有多少生命?不光是人呀,动物呀,植物啊,微生物啊。那每个每个生物,他生死簿里边都得有他的记录,什么时候出生的,他这一辈子要经历什么,他什么时候死,然后下一辈投胎,投胎去哪?啊,每每一秒钟,每一瞬间都要有多少种生物死亡,有多少生物这个出生啊,这个东西的这个是吧,这个太可怕了啊。哎。所以说呢,我们的系统也是一样。一定一定是要有权限控制系统的啊,是一定是要有权限控制系统的。
04:01
哎,所以说权限控制系统的目标就是管理用户的行为,保护系统的功能啊,这把系统功能保护起来,不能处于完全不设防的状态。啊,大家也要进行自己对自己也要保护是吧?啊,你不能说随便有个女生追求你,你就答应是吧。啊啊,那有太多女生追求你,那可怎么办呀,是吧,太影响太影响学习了是吧?哎,你得先权限,你得先验证一下是吧。哎,双方去批个八字呀,看看咱们这个八字合不合是吧,好吧,什么叫权限控制啊,这个倒其实好理解,对权利进行限制。哎,权限吧,权利进行限制,那么问题是具体怎么做的啊,怎么具体怎么做的,这都是好。
05:03
哎,我们这个呢,其实就三个W是吧,Y what,好呃,为什么。那它是什么,然后怎么做。哎,学很多东西都可以这样去去去切入,去入门。怎么进行权益控制呢?咱们先定义一个概念,叫资源。哎。资源就是系统中需要保护起来的功能。哎,具体形式呢,可以是UR地址,可以是一个handle方法或者service方法,也可以是页面上的一部分,哎,这些东西我们都可以用权限的方式把它们给控制起来。特别是我们后边用security啊,这些东西他都能够去做到。反正就是我们要保护的,这就是资源啊,别人要使用的就是资源。接下来呢,说这个我们得创建权限,哎,用权限的概念呢,来管理这个资源。呃,权限指的是什么呢,大家看。一个复杂的功能,可能通常包含很多个具体资源诶。
06:05
你看啊,比如说我们想要做这个更新的这个事儿,那么你首先呢,你得能够,你得有权利访问这个数据的列表。不然的话,你没办法去点那个更新的那个按钮。第二个呢,你点这个按钮,你得能够跳转到这个更新的页面啊,第三个呢,你得能够允许你提交这个表单。这三个呢,缺一个你就不能完成这个更新。啊,所以说这个我们就把这三个统一的封装成一个包,起个名叫权限。啊。把他们要整合,整合到一起分配给别人。啊,不然的话,我我把只是把这两个给你分配给一个人了啊,说你我就说告诉你说你有更新的权限,结果你能看到这列表,能够点那个超链接能够过来能够去看到这个表单,但是呢,你一提交这个表单就告诉你说没有权限。
07:03
啊,让你看得见,让你摸,让你看得见,吃不着。对吧,所以说呢,这个时候其实。并没有,这个时候你要是不全部给人家的话,这就嗯。没有完整的把权限分配给别人,他就做不了这个事儿啊。哎,所以说这几个东西呢,要分配就一起分配给呃。就是做这个操作的这个人,包括你删除其实也是啊,哎,你是得显示这个列表,得去执行这个删除啊,这这两个这两个资源呢,都得有访问的权限才可以。所以说这个权限吧,我们可以说是一个狭义的权限。狭义的选项啊,然后呢,我们前面这儿说的。这个啊,这是一个广义的选项啊,它们这个含义上有点儿区别。再然后呢,我们还需要一个概念,叫角色。如果一个系统非常的庞大。
08:01
那么我们需要保护的资源呢,就会非常的多啊,里边有这么多的资源要保护。然后呢,他也会有这么多这么多的这个用户来访问。特别是你像我们这个有很多生产制造型的企业,比如说它生产飞机。其实呢,比如说啊,就以这个,比如说波音747飞机哈,它不是一个国家生产的。它里边得有几百万个零件。这几百万个零件呢,就是得有十几个国家,每个国家负责生产一部分。因为就这个国家技术比较成熟,别的国家这个技术达不到,它生产不了。它是这几百万个零件,是由十几个国家分布在全世界各个地各地的这个生产的工厂去生产出来的,然后把它们拼在一起。这么想一想,以后就不不太敢坐飞机了。几百万个零件。十几个国家,那得多少个工厂生产出来的这玩意儿去拼一块儿。
09:03
他拼完了以后,他发现,诶,怎么多了一盒螺丝。这个。虽然这几百万个零件想想都可怕哈,他怎么就拼在一块儿了哈,所以说这个东西真的是这个,我们觉得,呃,这生产企业确实也了不起哈,这这个。呃,这那么大的东西能在天上飞是吧?然后呢,你想参与到这个环节里边的这些个人。他肯定也这样的企业,肯定他有这个这个这个这个管理系统,特别是他肯定会有这样的ERP系统。ERP翻译成中国话,有没有同学知道叫什么呀?哎,这个叫企业资源计划。企业资源计划啊,一是企业。就Java e的那个E。啊,二资源消息计划plan是吧,企业资源计划。
10:01
就是这个ERP呢,通常都是非常庞大的系统。非常庞大的系统啊,就是你像它能够去管理这个飞机生产,就是类似这样火车头生产啊,或者说你像华为的那种这个电信那种产品,大型的那种电信的交换机的生产那个过程啊,就是用类似这样的这个系统去管理的,非常的庞大。啊,这种系统它得这个很多这个团队得可能几百上千人干好几年把这个活干出来,然后还得持续的去维护哈。然后呢,嗯。这里边儿得有多少人来用啊,可能是几几千人都有可能几百人几千人上万人都有可能,然后呢,这个系统的这个功能呢,可能也是呃,几千几万的。那么这么多人去用这么多的功能啊,就是说你看这一边儿,假设是这个是是一万人。然后呢,去用这个1万个功能。
11:02
你这时候这个我们得给这一万人呢,要分配这1万个功能去告诉他们,你可以访问这个,他可以访问那个。这个事儿想想就非常的恐怖,太麻烦了。哎,所以说呢,我们把这个这个功能呢,既然是资源把功能呢,我们就封装成了权限。那权限的话可能就不是1万个了,权限呢,可能我们就也可能就呃1000个。哎,假设啊,1000个。这个其实还是挺多,然后这个人呢,我们也人,其实虽然说人很多,但是吧,他们可以分成几类。这几类呢,可能比如说呢,他们。角色吧,可能只有100个。的,这个也挺多哈。也挺多,然后这里边可能我们还可能会对于这种,如果庞大到这种程度的话,可能再划分这个子权限啊,然后。那你这个他们之间进行匹配,那就比这个最起码要简单的多了。所以说呢,我们要保护的资源非常多,另外一方面用系统的人也很多,那么我们把资源打包成权限,诶对操作简化,然后把用户呢,划分为不同的角色,也是对操作的操作的简化。
12:13
否则直接一个一个用户管理就会很繁琐啊,太麻烦了。所以说角色呢,就是用户的分组,也可以认为是分类,就一个意思啊,先给用角色呢,分配上这个权限,然后呢,我再把角色分配给用户的话,诶,这个角色身上的权限,这个用户呢就能够用了。所以这个时候有一个角色啊,就是用户的一个分类,用户的一个分类。在接下来呢,怎么去管理这个用户,用户也必须进行管理。操作呃,用户所谓用户呢,就是人操作系统的时候,诶,登录系统的那个账号和那个密码啊,就是最基本最基本来说就是这个,他用账号密码登录进来以后,他就会有一个身份。
13:02
诶,他就会有一个身份,用这个身份,以这个用户的身份去操作系统中的各种资源,系统里边呢,再凭借这个再去记录日志,再去控制它什么功能能用,什么功能不能用。所以说权限这有这么几个基本的功能,基本的概念啊,资源权限角色和这个用户啊,这是几个基本基本概念。那然后呢,说他们彼此之间呢,其实那必须得是有关系的。我用权限里边封装的是几个资源啊,权限里边分装的是几个资源?嗯,角色里边呢,它包含几个权限,诶,然后用户呢,是属于这个,每个用户都会有自己的这个角色。那么既然他们有关系,这个关系我们怎么去描述呢?权限到资源的关系,我们说这是一个单向多对多的关联关系。所谓单向呢,这个指的是。
14:01
Java代码啊这个。这个这是从我们账号代码的角度来说,从这个权限的。呃,这个实体类啊,呃,可以访问。资源。可以获取到。资源对象的这个集合啊,嗯,但是反过来从资源就不去找权限了。啊,不去找钱钱了。获取不到这个权限。为什么这样呢?因为我们通常呢,会关心这个权限里边包含哪些个资源。至于说这个资源呢,它属于它被分配给哪些权限了,这个事儿就不那么关心了啊,从我们实际操作角度不那么关心了。就好比说我们买东西。你有,你去超市买东西,你会去之前你去列一个单子,说我来以后我要买哪些东西,你会关心你单子上面这些东西有没有买全。
15:04
但是超市呢,其实他就不那么太在意了,他这东西卖给谁了,反正他卖了货,他收了钱就完事了。啊,所以这两边呢,不是都关心,只关心一边。这是从Java代码的角度,那么多对多呢,是指的是数据库表里面的啊,这是这个Java类之间是单向。数据库表之间是多对多。为什么这个是多的多呢?哎,因为我们说一个权限,哎,可以包含多个资源。就是你看我们更新的这个就是啊,一个更新包含这么多个资源。然后呢,一个资源可以被分配给多个不同的权限。你看同样是显示数据列表这一个资源。我被分配给他了,也被分配给他了啊。所以说一个资源也可以被分配给多个不同的权限啊。
16:05
这个也都好理解,所以说数据库表之间事都得落在关联关系。嗯。接下来这个角色到权限也是Java类之间是这个单向的。哎,这个因为我们说从角色。嗯。实体类啊,它可以获取到资源对象的集合。啊,不是权限啊,权限。哎,看我这角色里边包含哪些个权限。嗯,但是嗯,通过权限获取不。道。嗯。角色。这个也一样的道理啊,我们关心的角色里边包含哪些权限,但是就不太关心权限被分配给哪些角色了。然后数据库表之间也是都对多,哎,因为一个角色可以包含多个权限。
17:01
一个角色在他的工作范围内啊,他要做的事很多,你得把这些权限都给他,他才能做工作。一个。嗯,权限可以被分配给多个不同的角色。你比如上班打卡,这是每个员工都都得有这个权限。啊,你不能说你不能说你不不允许我去打卡啊,啊这个这个,然后到到最后呢,说这个没有没有全勤奖对吧?啊。一样的道理啊,说这个他们套路是一样的,下面这个用户到角色呢。这个Java类之间呢,是一个双向的。所谓双向呢?也就是说,我。呃,可以通过用户获取。哎,他。具备的角色。也可以。
18:01
看一个角色。下包含哪些用户?这是双向的。嗯,数据库表之间。那么一个角色呢,既然它是用户的分类,那它当然理所当然的自然的就可以,这个包含多个用户。一个用户呢?我们生活中有没有一个人身兼数职的情况?哎,比如说一个公司里边一个销售部的部长,可能有可能同时也是主管销售的副总。对吧,哎,你要市场部的部长,也可能是主管主管市场的一个副总。技术部的部长,可能同时也是技术总监,主管技术的副总是吧,哎,联合创始人是吧,等等,这这个他干的活还是那么多活。多给一个头衔就多给一些钱,多给一个头衔就多给一些钱啊,哎,你这个在公司里边你的作用越来越重要是吧,老板就得想办法把你留住啊。
19:07
这就叫你在公司里边的不可替代性啊。一个角色可以包含多个用户啊,一个用户呢,可以身兼数职。啊,这个也都都好理解哈,嗯,这里边就是有一个事,就是说我们这个多对多的关联关系,在数据库表的话,表示的时候呢,得注意一下。
我来说两句