00:00
各位同学大家好,前面内容中呢,咱们已经修改完成了用户登录接口,获取用户信息接口,我们完成了CTRL部分,那咱们再看一下这个获取用户信息的接口,首先找到index ctrl里边我们看到我们之前的做法就是从请求头里边得到ton,根据token得到用户名称,再根据用户名称得到它的数据,包括用户的基本信息,菜单权限以及按钮权限,最终返回外部集合。然后咱们进入到里边,大家看啊。在这个位置。咱们得到用户信息,然后有两个权限按钮和菜单,最终通过map进行返回,所以咱们最后缺少的就是这两个方法。根据用户ID得到菜单,还有按钮的权限,那下面呢,我们就重点来编写这两方法,咱们最终给他完成一下,首先我们先写第一个方法,根据用户ID查询菜单的卷值,就是我当前用户能操作哪些菜单,对哪些菜单有操作权限,那咱们把这个来写一下,首先我们先做一个最基本的一个分析,咱们来看一下这个过程。
01:21
这个过程就是用户跟菜单我们看到没有直接关系,而用户是不是属于某个角色,角色是不是属于这个菜单,所以咱们要进行多表的查询。咱们看一下我们里边的这张表,看里边是怎么样一个产权关系,我把这个打开,然后大家看里边。咱们啊,把这个表给各位爷打开,我们在这个位置。首先第一个啊,我们有一张表叫用户表,就这个表。System user,这是第一个表,代表咱们的用户表。我把这个表给各位写到这里。
02:01
然后用户呢,他跟菜单没有直接关系,是不是要跟角色建立关系,而他跟角色怎么建立关系,大家看这个表就是用户和角色的关系表,所以咱们肯定要关联这张表,我把这个给各位也写到这里。用户角色的关联表,然后这个关联之后大家看啊,比如说我现在用户跟这个进行关联,咱是不能得到用户属于哪一个角色,然后这个之后呢,我们再做什么,是不是咱要看这张表,看我的角色能操作哪个菜单,所以最终我们要查的是这三张表的这么一个关联部分。给各位啊,再重复一遍,这关系各位必须要弄清楚,因为一会儿我们要编写S语句进行实现。根据用户ID,他跟角色的关系,咱们查到用户是属于哪个角色,再根据角色ID去查菜单,看角色能操作哪个菜单,角色能操作菜单是不是就是用户能操作菜单,所以咱们要进行三张表的关联查询,第一个表用户表,第二个表用户决策关系表,第三个表决策菜单关系表。以上是咱一个基本分析,那下面呢,我们根据这个过程,咱们就具体写一下这个代码。
03:23
在代码里面我们详细做个实验。首先代码中呢,咱把步骤给各位先做个分析,我这里来写一下。首先第一步操作呢,按照我们项目的场景,包括别的项目也是有类似这场景,大家想一下啊,一个这个系统中是不是会有一个叫超级管理员呀,而超级管理员是不是有一个,你不能有多个,所以咱们这里边我就约定我这里写一下我们的规则啊,Adin我们作为我们项目中就是或者这个系统中唯一的一个超级管理员啊,当然可以有多个,咱就一般都是一个,就是有adin是超级管理员,那大家注意啊,超级管理员登录之后,他是不能操作我们里边的所有内容。
04:11
包括你所有菜单,所有的这个按钮是不是它都能操作,这是超级管理员能操作所有内容,所以这里边呢,一会儿咱做个判断,如果是超级管理员,那咱就查出所有内容,如果不是超级管理员,那我们再查询里边相应的这个权限,所以这里边我们写一下,而怎么写,咱们看一下我这个用户表里边,比如说我这里边啊,我这么约定,我的in是超级管理员,他的ID咱固定就是一,所以我们做一个判断,我写到这里啊,咱们判断如果说用外地的值是一。代表他就是超级管理员,那咱就查询所有的这个权限的数据,这是一个,然后再判断,如果说用ID它的值不是一,那就是其他类型的用户,这个时候咱们再查询。
05:08
就是这个用户的这个权限,所以这是我们一个判断管理员查所有,他不需要再单个去关联,再单独怎么去查,直接把所有都查到,而用户再根据条件关联进行查询,这是我们说到的啊。然后下面我们来具体写一下这个代码。首先第一个我们做一个判断,呃,咱为了明确啊,我在外边呢,我先创建一个历史集合,为了封装我们最终的这个数据,加上一个list,然后叫做system menu,这个list我们起个名字就叫system menu list,咱们先来一个捺,然后下面在这位置,我们首先做一个if判断。给各位写一下啊,呃,这个名字为了看着方便,咱给他改个名字叫u cid,那我这里写一下,如果说user sir ID这个值,它的值就是是一,那咱们就是表示是超级管理员,我们进行这么一个查询,那这里写一下啊。
06:12
就是写到这里。它的值是一,我们是点ES user ID,那这个时候咱就查询所有,那我们用这个map中的方法进行实现,因为我们在这个me里面,咱们用base map中select list,然后咱们直接查询个全部,但是查的时候咱也要判断一下管理员是否可用。啊,包括我们可以做一个这个排序等等,给咱们给它加上一个query rapper。System menu等于上一个quary rapper,然后rapper里边设置它的条件,第一个就是那个S。它的值肯定是这个一。然后包括咱们可以做一个叫这个大家看啊,Order by是排序,比如我们做一个排序啊,咱做一个排序,我们找一下啊,在表里边应该是有一个专门的排序字段。
07:13
咱们看有没有啊,根据什么做个排序。那我们现在比如说呃,这个表里面,我们就根据这个ID啊,咱们做一个排序。我写到这里。ID排序。然后最终把rapper给它传进去,返回的就是我们这个list集合,咱们叫set menu list做一个封装,所以第一部分完成管理员本就是查询全部。啊,这个完成啊,咱们再看一下表里边,因为我记得应该有一个排序的一个字段啊呃,这个啊,这个是用户表,咱应该看这个菜单表,然后菜单表里边各位看这个地方是不是叫SOY表,就是咱们创建菜单的时候,也是第一个第二个第三个用它实现,所以咱们用这个我们在一块去。
08:01
用它也是第一个,第二个等等,以上就是一部分管理员查询全部这个完成,完成之后我们再加上一个else else里边呢,就是如果他不是超级管理员,那我们就做普通的关联查询,管理员肯定是查全部不需要关联,那咱们继续写一下啊,我们调用base map中这么一个方法,咱给方法起个名字,就叫这个饭的这个。利的。User ID。咱因为查的是菜单部分,所以我们叫饭的这个menu。List的user ID里边传入用户ID,最终返回的肯定也是这个list集合。所以现在啊,咱们这个结构就完成了,完成之后这方法咱们先做一个创建,然后一会儿我们进行实现。我加个注释,根据用坏地查询。
09:01
他操作的这个菜单的权限的数据。这个我们就完成,然后完成之后我把这个这个先写完,然后最后咱再写map,然后这里边往下怎么写呢?各位注意啊,因为咱们就是查询菜单的数据,最终数据返回的是不是也是一种树形结构,所以咱给他就是到这里啊构建成一个。树形结构。那我来构建啊,咱们之前呢,有这个工具类都已经写过了,叫build tree,传入这个集合,最终返回的就是一个树形这个例子集合,咱们给它起个名字啊,比如叫这个system,这个menu tree。List现在我们就完成了啊,但是完成之后呢,我强调啊,就是这个数形结构呢,你还不能直接返回,因为有这么一个问题,咱们这个前端的这个路由的,或者说我菜单那个结构跟这个还是有点区别的,就是里边的属性它不太一样,那我们来看一下啊,什么意思呢?各位看我们前端中的这个地方。
10:11
也就是说的简单点啊,咱们之前写的这个路由菜单,我们是不是都是写固定的啊,就是写的这个纸,而现在这部分我们要通过数据库查询,然后给他返回这个数据,而不是写固定的,就这个意思,比如我张三用户登录,那返回张三这个菜单,这个路由,然后他进行显示,就也就是说把这部分我们可以动态实现,而不是写固定,那现在咱要最终返回到是不是满足这个结构,这个结构呢,跟咱之前的数形结构虽然说是差不多的,但是里边的属性是不是有点区别,比如你看啊,有pass,有component,有的这个值跟之前还是不太一样的,所以最终要把书中结构变成了是不是这个样子,是不是太可以,这是我们要做的事情。也就是说我们现在在这个就是基础之上给它变成路由,最终要求那个结构我写一下啊。
11:05
写到这里。转换成前端路由要求格式的这个数据啊,咱们肯定要就是这个样子,那怎么做呢?跟之前写法类似,这个我就不给各位再敲遍了,因为之前那个menuper写法类似,我这里边呢,给大家写好一个工具类,咱直接复制,然后咱看一下这里是怎么写的,最终把它来调用一下就可以了,跟之前类似,咱们也详细看一遍啊,我不带各位再敲一遍,因为之前的这个是相似一个过程。然后现在啊,我在里边。建个类。Route helper,然后建完类之后,把这个类给各位直接分过来,就是里边的方法,咱们直接拿过来。我们给它放到这里,放到这里之后,咱们把这个工具类我们来看一下啊,它的目的呢,就是最终把你数据变成咱们前端的这么一个结构啊,这结构你看啊,它里边有第一层。
12:09
丘疹里边第二层,当然里边可能还有第三层等等,但这里面应该只有两层,把这个可以动态获取,而不是写固定,那大家看数据里边是怎么做的啊。首先我们的做法中可以得到我们当前这个就是路径啊,就是把你的路径得到。然后得到路径之后,我们这位置就是传入你这个数形,这个集合就是咱刚才的这个集合,然后集合里边怎么做啊,这里边啊有个原则,各位记住啊,咱们见到这个集合或者说数组要么变历,要么返回,所以现在把它变历,然后用一个对象叫root view,你看啊,这里边是不是有咱们的相关数据,包括有pass,有这个comment,有什么children等等,跟咱们这个结构应该说是。类似的,你看是不是就这个结构,就这些值,什么might呀,什么children,这里边应该都有,然后咱们根据这个结构我们进行封装,首先便利,然后向里边一个一个是不是set这相关的值,包括children往里边再继续set,就是最终啊做到这个效果。
13:18
然后包括它的下一级是怎么样,你看这里边依次做到。这个啊是我们看到的啊,然后过程中,因为它可能有多层这个位置,是不是做一个这个递归调用,就是自己雕,自己知道它结束为止。这是一个工具类啊,各位直接拿过来可以了,跟之前思路是类似的。然后拿回来之后,在这里边我们最终来给它完,完成最终部分,我们在里边调用刚才这个角。Route helper。然后它里边的方法叫这个build root,传入刚才咱们这个集合,注意啊,不要传错,把这数即可传进去,最终返回一个就是我们最终这个集号,咱们叫route will list。然后把它做一个理。
14:09
所以大家看啊,现在我们的第一部分就完成了,根据用快递查询出它的菜单权限,这个我们service部分就写到这里,然后注意啊,这里边有工具类,它的目的就是最终变成前端要求格式跟咱之前写那个菜单类似,只在菜单基础之上,它的名字有很多的变化,最后用了一个工具类,我们直接做了一个封装。这个就写到这里,然后之后呢,我们最后这里边还有一个方法,注意啊,咱还没有写完啊,还有一个方法,咱map中还有最后这个查询,这个查询如果管理员肯定不需要直接查全部,如果你是普通用户,那咱按照刚才分析到的要进行三张表的关联查询,所以咱最后咱就来编写circle语句,来写map,咱们先写完service啊,马上来编写map中的这个代码。
我来说两句