00:00
各位同学大家好,刚才呢,咱们完成了获取用户信息基本结构的编写,最终呢剩下两个方法,一个是根据ID获取可以操作的菜单列表,另外一个是获取可以操作的按钮列表,那下面呢,我们开始编写两个方法,首先我们先做一个步骤的分析,然后进行实现,那咱先看第一个方法啊,根据用户ID获取用户可以操作的菜单列表,咱们看这个该怎么去做,那我在里边给各位写下它的实现的步骤,咱们一点一点进行分析。首先大家看啊,我们的第一步操作。第一步怎么来做呢?咱们先看一下我们的表里边,我把这个用户表先打开啊,注意是用户表把这些打开。那大家看啊,在用户表里边呢,各位看到大家应该明确啊,我们的用户呢,一般来讲有这么一个情况,咱们在一个系统中是不是有管理员,还有普通用户,所以这里边我们的需求中的,咱这么来做,就咱们约定啊,ID是一,代表我们的管理员,不是一,那就是普通用户啊,当然你可以约定别的值,或者说不这么约定,我目前就做这么一个需求,所以这里边呢,第一步咱先做一个判断,判断什么呢?写一下啊,就是判断当前用户是否是管理员。
01:26
所以第一步要做这个事情,那这个什么意思呢?往下来看1.1,如果说当前用户是管理员,他应该可以看到,或者说查询所有的菜单列表,就所有菜单他都能看到,这是咱做的第一部分,那咱们判断的依据是什么呢?咱这么来判断,UID如果等于一,那它就是管理员,如果不是一,就不是管理员,这是我们做的第一部分,也是我们当前的需求,在实际中可能是别的需求,但是总体思路应该是一致的,然后之后我们继续来看啊,咱们看就是1.2。
02:08
如果说不是管理员,那怎么做,我们就根据用户ID去查询出他可以操作的这个。菜单的列表,这是我们做的1.2,那这个查的时候咱们进一步来看啊,因为查的时候呢,我们是根据用户ID进行查询,这个查我们最终肯定要查到一个菜单部分,但是过程中涉及到有这个多表的一个关联查询的这么一个部分,那怎么关联,咱们做一个说明啊,首先大家看我这个图里边啊,咱们目前呢,一共有这么五张表,就这五张用户。角色菜单用户角色关系表,还有角色菜单关系表,而咱当前是什么,是不是用户ID啊,那大家想一下,我们怎么查用户ID,第一个大家跟着我思路来看啊,你看这里哪个表里有用户ID?
03:09
哪个有是不是用户表,还有用户关系角色表,那因为咱目前最终要查菜单,所以咱们直接来到用户角色关系表,当然用户角色关系表跟菜单表是没有关系,要建立关系怎么做?大家说怎么做,说这过程啊,我这里给各位写一下啊,啊,咱就写到。换一个图里边啊,换一个图里边,我们来写一下这个实验过程。在这个图里边呢,我把这个表咱们先复制过来,然后咱们做一个详细的分析,因为涉及到多表的关联查询啊,咱们拿过来,然后大家看啊,首先我们怎么做,就这位置我们的第一步操作。就是怎么作,根据用户ID进行查询,这是我们操作,那用户ID呢,它肯定是在这个用户表和用户角色关系表中,但是我们现在最终想查菜单,所以我们第二部分我们要做一件事情,就是建立起来这个用户角色关系表。
04:15
啊,用户角色关系表和菜单表之间的这么一个关系,让他们建立关系,那怎么建立呢?因为他们之间没有直接关系,所以我们的做法就是写一下啊,根据用户ID是不是查询出他这个角色ID,然后根据角色ID再去关联他的决策菜单关系表,最终跟他是不是建立关系,就是总之起来啊,最终我们应该是这么一个结果,咱看最终的一个目的。咱们最终就是至少需要有三张表的关联啊,三张表的关联,那三张表,首先第一张表就是用户角色关系表,第二张表是角色菜单关系表,第三张表那就是菜单表,我们的过程就是根据用户ID得到角色ID,根据角色ID得到对应的菜单ID,再根据菜单ID得到菜单中的相关的信息,这是我们要进行关联查询操作,就是三张表的关联,最终得到用户可以操作的菜单列表的信息。
05:27
这各位要明确啊,所以咱们一会儿要写语句,把这个进行实现,我在这里边给各位写一下啊。用户角色关系表。角色菜单关系表。以及我们还有一个表,那就是菜单表,要实现这三张表的关联,最终得到我们的数据啊,咱就编写语境事件,然后这个之后我们继续来看啊,大家注意啊,刚才我提到,因为我们查数据库返回的数据跟我们最终要求的结构应该是不一样的,所以最终呢,要把查出列表构建成这个框架,是不是要求的结构,包括你看里边啊,比如有这个pass,有confidence,有这个children啊,包括里边有相关的这个结构,所最终第二步我们还要做这个事情。
06:21
把。查询出来的这个。数据列表。最终构建成我们这个框架要求的这个路由的这个数据结构啊,咱要变成这个样子,然后变成这样之后,最终我们来进行返回。以上是咱说的这个基本的过程啊,我再重复一遍啊,然后咱们把这个分析完,最终来编写代码。首先第一步我们做这个判断,当前用户是否是管理员,如果是管理员,那查询所有财产就什么菜单都能看到,如果不是管理员,根据ID查询,但是查的时候因为根据ID要得到菜单列表,所以我们涉及到三张表的关联,用户角色关系表,角色菜单关系表,还有菜单表,然后最终把查出的数据要构建成。
07:13
框架要求的路由的这个结构,而框架要求的路由结构就是咱们看到的这个结构啊,最终做构建,然后把数据最后做一个返回就可以了,以上是咱说的这个基本过程啊,所以各位把这个要特别的明确啊。这个分析之后呢,下面我们来看这个方法,根据用户ID获取用户可以操作的按钮的列表,跟这个流程差不多,那咱们快速写一下步骤啊,首先第一步还是判断是否是管理员,如果是管理员,那我们就要查询所有的这个按钮列表。这个得到,然后第二步,如果说啊不是管理员,那咱就根据用户ID来查询按钮的列表,就可以操作的按钮列表写的更完整点啊,这是我们的第二部分,而这个查的时候,其实就是刚才我们在这个方法中写的这条语句跟它是一样的,涉及到也是一个多表的关联查询,咱们这个方法一起共用就可以了,然后这个之后我们的第三步,注意啊,第三步从查询出来的数据里边获取到可以操作的按钮的那个数据,就是按钮那个值,按钮值咱刚才提到了就是里边的。
08:40
这个值啊,就是把这些得到,然后最终变成一个粒子集合进行返回。获取它的值的这个例子集合,然后最终进行返回。这是我们说的第二个方法,就是把刚才的方法直接共用,再调一次,只是为了得到它那个按钮值。
09:01
以上是一个步骤的分析,咱们就说到这里,然后分析之后呢,下面呢,咱们就开始来写这个代码,把代码最后最后实现,那咱们来看一下啊,首先我们的第一步操作,先判断是否是管理员,那我在里边写一下啊,加上一个。If。如果说user ID啊,咱们来一个浪Y6啊,如果它的值等于一,表示它就是管理员,然后这里边再加个else不是一,那他就不是管理员。这是我们一个基本的结构啊,把这个叫这位置,如果说他是管理员,那咱们就查询所有的参列表啊,它里面就涉及到什么权限管理员嘛,能看到所有,那咱们这里边来查下啊,所有的这个内容,我加上拉DA rap加上这个菜单。
10:00
然后加上rapper。等于上一个拉姆的快rapper。加上之后在rapper里边加上它的条件,这个条件加呢,主要咱加的应该具体说是有两部分啊,第一部分就是咱之前提到的我们菜单里边呢,大家看这个表里边啊,有一个字段,这个字段呢叫做CS,就是咱们判断这个值是一,我们进行查询,然后第二个呢,里边有一个排序字段,就是它是第一个显示,第二个显示,根据它我们来做一个排序啊,主要来做这些事情,那在里边写一下啊,第一个加上。Set menu。Get这个这个值我们查是一的,这个数就是可用的菜单,然后之后呢,加上一个排序,注意这个排序啊,之前咱没有用过,咱看一下叫order by d order by a,是不是一个升序一个降序,所以咱们做一个升序排列。
11:06
加上menu。然后加上里面这个叫做get so value啊,根据这个值进行排序,就是它是第一个显示还是第二个显示,最后我们调方法实现,咱们调base map中的方法list里边入per,然后它返回就是一个菜单的这个列表。啊,这个我们就做到了,这个给它起个名字。我这里写一下啊。想给他拿到外面来。那我就放到这个位置啊。等于个那。放到这里。然后这里边等于这个集合,所以现在啊,咱们把第一个判断完成了,管理员得到最后的菜单,然后再来看啊,如果说啊它不是管理员,那我们就要根据ID进行查询,这个时候我们调用map中的方法,咱们需要自己建个方法,因为要写SQ语句了,我们起个名字啊,Find menu。
12:22
丽子道。根据用户ID。传入用户递,最终返回一个历次集合啊,就是咱刚才看到的这个历次集合。所以现在啊,把这方法我们就创建出来了,然后这个方法中咱刚才做了分析。它涉及到的有三张表的关联查询,那咱们就需要编写circle语句进行实现,那我这里边啊,在map中,咱们把方法先给它创建出来,咱们一会儿来进行实现啊,先把方法创建,这是我们三张表的关联查询,根据用户ID得到菜单列表。
13:03
这个完成,然后完成之后咱往下来看啊,目前这个集合都得到了,咱们的第二步操作,把这个查出集合构建成框架要求的路由,这个结构就是构建成这个样子,那咱把这个先做构建,怎么构建,我这里强调啊,首先第一个啊,咱们之前呢,曾经写过一个菜单操作的工具类,我们找一下啊,Menu里面一个方法叫build。然后里边传入集合,通过递归方式,咱得到一个树形的这个结构,我给它起个名字啊,我们写一下。位置,我叫system menu。Tree list是咱之前用到的,当然各位注意啊,这个构建的结构呢,虽然说是一个树形结构,但是跟我们框架中要求的结构不太一样,比如说里边啊,没有这个component,没有这个pass,没有里边的这些结构,包括什么always show总是显示等等,它没有这些值,所以这个结构如果你直接传过来在页面中它是没法直接显示的,因为跟他要求的结构是不太一样的,这是咱之前只是为了做这个是用显示用的,但是它的要求跟这个还不太一样,所以咱要把这个集合构建成它要求的这样的集合。
14:26
那咱看一下怎么做啊,下面我来写一下进行构建。首先角这位置我们先使用这个就是菜单操作的一个工具类,构建成一个树形结构,但是树形结构呢,跟我们要求的不一样,所以咱们需要进一步构建,构建成要求结构,我这位置写个方法,我叫这点这个build。啊,这个router。就叫它了啊,然后里边把这个集合传进去,最终让它返回的肯定是一个list集合啊,咱们叫这个router。
15:05
List。然后这里边加上一个泛型,这泛型就是咱们刚才看到过那个泛型叫routeor VO,最终通过VO进行数据的结构封装,然后大家看啊,在里边有pass,有这个就是啊,O是否显示包括包括children,你看这里边是不是都有,那咱根据它把这结构做一个重新的构建。啊,这是我们最终返回,最后把它做个退。这是咱们基本结构,然后这个完成之后,下面呢,我们在里边呢,把这个方法创建,然后在里边把结构咱们就构建一下啊这个方法。我就写到当前里边啊,因为只是当前这里用构建成框架要求的路由结构。我把这个流程啊再说一遍啊,你这过程虽然不难,但是也做了很多的步骤,首先第一部分。
16:02
先判断当前用户是否是管理员,我们就自己约定一个规则,但是规则不一定是一啊,我就约定成一了。比如咱约定ID是一代表管理员,管理员那就查询所有菜单,如果不是管理员,根据ID进行查询,这一过程中涉及到有多张表的关联查询,这个方法我这里已经创建过了,咱们一会儿编写语句行实现,然后之后呢,把返回集合要构建成框架要求的结构,如果用之前的工具类只是一种树形结构,跟框架要求结构不太一样,所以咱给它继续进行构建,通过这个rootor VO进行封装。这是我们刚才写的过程啊,然后下面呢,咱就要开始在这个方法中构建成框架要求的结构,那咱们看怎么来做啊,这里边传入我们那个就是树形结构的集合,咱给它起个名字啊,啊,为了方便我就叫这个mus。
17:02
然后怎么做呢?我们来看一下啊,首先过程其实并不难,第一部分咱们把它是不是要变历,遍历之后呢,得到里边的每个system menu对象,然后像那个root view中来set值,最终完成我们的操作啊,当然在过程中里面涉及到有一些细节问题,比如大家看啊,在我这个表里边。或者说这么来看啊,这个表里边,它里边是不是有层级的关系,而这个层级关系中,在表里边有个字段,这个字段它叫type,大家发现啊,这个type的特点你仔细看啊。是最顶层的。系统管理啊,零包括什么审批设置,包括这些都是系统管理,什么审批管理都是最顶层的,然后下面有一个叫一,一是不是它的第二层,然后这个二什么意思啊,二表示是不是它的按钮的部分,你看这个二啊,什么分配权限,分配角色增加,修改,删除,查看是不是就是按钮,所以这位置我们要做一些相应的判断啊,通过它来构建出它那个多层的结构。
18:11
这各位要特别注意啊,然后咱们下面呢,把这个具体做一个代码的编写。
我来说两句