00:00
各位同学,下面呢,我们来具体编写。角色分为菜单在service里边的方法,首先我们写第一个方法,第一个方法怎么做,同样我把步骤给各位先写一下,然后咱们按照步骤一步一步进行实现。首先第一步操作,我们先查询所有的菜单,这是第一步,但是查询菜单的时候呢,里边有一个细节问题,大家注意看啊,我们来到这个菜单的表里表打开。大家看,在表里边呢,有个字段叫CS,它表示菜单的状态,我们约定一代表可用,零代表不可用,所以咱们查询状态是一的菜单,也就是在这里边,我们需要加上一个条件,我写一下啊,添加上一个条件。C的值等于一表示菜单可用,如果不是一表示菜单,那就不能用了,这是第一步操作,然后这步之后我们的第二步操作怎么做,根据这个角色ID进行查询,我写一下啊,根据。
01:09
角色ID,也就是里边这个ID,根据。咱们查询什么?就是查询我们的这张表,大家看到啊,角色菜单的关系表,在这表里边查什么?查询角色ID对应的所有的菜单ID,比如说我现在角色ID查出ID是什么,就是幺幺和幺二,这是我们的第二部分写一下啊,查询角色菜单关系表里边查到角色ID。对应的所有的菜单的ID,对应的菜单ID可能没有,也可能一个,也可能多个,这是第二步,然后这步之后我们到第三步操作,大家想一下第三步咱该怎么去做。
02:01
这里边是不是得到所有菜单ID,那第三步做法就是根据获取的菜单ID。最终获取到对应的这个菜单的对象,如果说我们写语句,那它应该是查询咱们这个菜单这个表,然后根据菜单ID的对象,但是现在呢,我们这里边没有写误语句,所以咱怎么做,我们可以让菜单ID跟所有菜单里的ID进行比较相同,做个操作,这里写下写具。就是3.1。我们的做法就是。拿着这个菜单的ID和所有。菜单集合里边的ID进行比较,如果说它们相同,我们就进行封装,如果不相同,那咱们就不封装,这是我们要做的事情,而在封装中呢,这个跟之前那个稍微有一点点区别,大家看里边啊,我们看这里边。
03:14
在实体类中呢,有一个属性,大家看这个属性。叫什么?这属性什么意思呢?如果说你这里边已经包含,或者说你这个ID在那个机构中有相同的,那把这个就变成,如果说里边没有相同的,那就给它变成false,通过这个来判断是否选这个菜单,对,咱们现在来做这个事情,比如这里写到的啊,所有菜单以及角色它已经分配过的菜单,通过it select进行处理,如果它等于处表示已经分配,等于false就表示没有分配。所以以上是咱们说的一个基本的一个步骤。
04:00
那咱们下面啊,把这个按照过程我们来给他写一下,然后最终把这个代码,但是最后啊,咱要构建成我们最终想要的一个结果,比如说我们这个菜单的位置还是按照使用结构显示,就是调用之前的方法进行显示。这个我也写一下啊,第四步。返回我们。规定。格式的菜单的那个列表或者菜单集合,就是咱之前写那个递归的那个过程,调那个方法进行实现,这是一个步骤的分析,那步骤之后下面呢,咱们把代码来写一下,首先第一部分我们先加上一个条件。拉姆岛query rapper加上。System menu,然后加上。等于上一个lada rapper就是这么一个对象。这个对象呢,为了跟后面可能会有冲突,咱们把这per改个名字,然后里边设置它的条件,这个条件我来写一下。
05:07
加上里边这个,也就是这个值,它的值等于一表示可用,这是条件,条件写完之后我们调用方法。Map里边的方法list传入rapper。最终返回到list集合,这list集合里边就是我们当前所有的菜单列表,给它起个名字,我们叫这个。System。例子的。咱们啊,给他加上。写下menu list。所以现在我们的第一步完成得到所有菜单的列表,但是这里边注意要加个条件,然后这个之后我们写第二步,第二步呢,根据角色ID我们进行查询,注意啊,这个查的是什么呢?是你角色菜单的关系表,就是要查我们的这张表就是。
06:11
而这张表查的时候呢,咱们之前呢,应该把的和已经生成过这个,所以咱们现在啊,在里边把的service我们给它注入进来,为了一会儿进行操作。咱们进行注入。Private system menu。写一下啊,Menu。肉service啊,还是肉me,大家看一下啊,这个名字叫肉menu service。Service把这个我们进行注入,为了一会儿进行操作,然后注入之后咱们回到下面的这个位置中来,我们来进行查询,查询的时候呢,根据角色ID查询,所以咱们同样还是封条件,因为跟它类似,我用它来改一下啊,但是跟这肯定不一样,咱为了写的方便啊,用它改一下。
07:07
里。肉。Menu啊,这里边我叫做。System肉。Menu就是这个对象,对象之后向里边呢来设置它的条件,这个条件我写下system menu加上角色ID。就是D,现在条件完成,完成之后我们调方法实现,注意不要调错啊,角色菜单关系的service里边我们调一下它里面这个方法,它的方法叫。看一下啊,应该叫做list。然后传入。Rapper,注意啊,不要写错啊,当前这个,然后回到是一个list集合,这个list集合中就是包含角色ID,对应到所有菜单的这个ID的信息放到色机构中去,所以现在啊,把这部分我们就完成了。
08:08
然后咱们给它起一个名字。写到这里啊,System menu。啊,我们就叫这个名字了。这个咱们就完成,然后完成之后第二步咱就写到这里,写到这里之后呢,因为当前这个是一个集合,集合里边每部分对象,我们现在呢,先把这个所有菜单的ID从里到,因为咱要根据ID做操作,那咱们来获取一下啊,获取这个集合中所有菜单的ID,这个咱之前写过啊,你可以把它历或者说用的方式进行都是可以的,看你个人的习惯,我就习惯写一个次流,你这么写更加方便啊,加上拉表式。然后加上get menu ID,点上collect方法加上s.to list,最终返回一个list集合,然后这个list集合中就是角色对应的菜单的。
09:12
所有菜单ID集合,这个我们就写出来了,然后给它起个名字啊,我们就叫这个。Menu ID。历史的。现在这就完成了啊,跟之前那个用户分配角色是一样的,那这过程呢,给大家再重复一遍啊,有同学可能没有看的特别清楚,我再说一遍,怎么去做的,第一步得到所有菜单,这个步骤呢,咱们是查询菜单表,因为菜单表里面有个字段叫这个值是一才可用,它不是一就不可用,所以咱们加个条件,根据它查出所有菜,就是o menu。然后第二步呢,根据角色ID查询角色里边所有的菜单ID,咱们查的是这张表,就这个表里,你看啊,角色ID是一对应的菜单ID是幺幺和幺二,把这两值查出来,所以咱们写的代码中根据角色ID查出来,查出来之后从集合中取到所有的菜单ID,这个menu ID list就是我们的所有菜单ID的list集合,现在我们就完成,完成之后呢,下面咱就做三点步骤。
10:32
拿着菜单ID跟里边的所有这个ID进行比较,看它们是否相同,相同的话我们进行封装,把里面这个变成。那咱们啊,下面把这个来写一下啊,我们来实现,咱就把这个所有菜单的集合进行便利。啊,这个我们就直接来一个each,你个果你其个each,如你想用法可以加上个stream,看你的这个实际啊,我就给它都加上了,其实便利可以不加stream。
11:11
写的完整点啊,加上,然后在里边下我加上一个名字叫item啊,这item名字随便起的啊,我就叫item,或者说你看我这位置,我说叫C,就我叫搞W。是不一样的啊,看你的个人习惯啊,就叫这个C,这里边叫item,然后加上之后,这item就是我们说那个便利之后的那个B项,那下面呢进行判断。我写到这位置啊,首先menu I里,如果这个ID it ID示里面含,那咱们进行封装在it里。Is找到啊,应该有一个这个,然后它的等于。
12:06
否则的话,这个值就等于false。我把它写完整啊,等于所以现在这部分就完成了,也就是这个效果,就是最终呢,咱通过这个值来决定它是选中还是不选中,意思select进行决定。现在啊,这个第三部分我们就完成了,也就是拿着你这个所有ID的集合到所有菜单集合中判断看哪个相同,相同的话是变成处不相同,这是变成副,现在就完成,完成之后呢,最后咱们返回规定的那个菜单的那个数形结构的格式。这里啊,就是数形显示的格式的列表,那我们写一下啊,之前有那个工具类menu help。各位应该记得啊,Me应该刚写过,然后里面这个方法叫build们加入所有菜单这个集合,最终返回的是一个list的,然后咱把最终返回这个list做一个就可以了啊,就返回它。
13:16
然后把这个我们做一个。被退。所以现在啊,我们把这个方法就完成了,查询所有菜单,然后查询角色已经分配过的菜单,通过这段代码我们进行了实现,所以大家啊,把这过程一定要特别熟练,包括你可以结合我们最开始写的这个方法,你看一下啊,就说咱们写过这个。找到这里。就是这个位置啊。用户分配角色。这个里边也可以结合他看一下我们当前这个写法,因为它里面的过程基本上应该说是类似的。这个啊,我们就完成了第一个方法,然后第一个方法完成之后,大家再看第二个方法,这个方法做什么呢?就是为角色分配菜单。
14:06
咱现在开始做它,那这个怎么做呢?咱也分析过了啊,这里给大家再来写一遍啊,同样写步骤第一步大家想一下怎么做。比如我现在啊,这个角色分为菜单,那我角色之前是不可能分配过,也可能没有分配过,所以第一步操作根据角色ID来删除表里已经分配过这个菜单,这是我们做的第一步。写一下啊。根据角色ID去删除菜单。角色表里边。分配的那个数据也就是啊,比如说举个具体例子,我现在举ID是一,那把这个ID是一的数据,两条数据咱们都给它删掉,就达到这个效果,这个删掉,这个也给它删掉,这是咱们做的第一步。
15:02
这各位给他明确啊,然后这个之后我们的第二步操作。第二步做什么呢?大家看这个对象,在这个对象中呢,它里边有一个属性,然后给它打开啊,这个属性叫menu ID list,就色中最后才能集合,那咱们把这个进行遍历,然后把每部分数据都加到咱的数据库中可以了,这个数据库表还是菜单角色关系表。那我写一下啊,我们从。参数这里边获取角色他新分配的菜单的ID那个列表,然后咱们进行便利,便利之后把每个那个ID。数据添加到菜单角色关系里面去就可以了,这是我们做的第二部分。那下面呢,我们来进行具体实现,首先第一个啊,先进行删除。
16:04
拉的query rapper,加上这个system。Menu,因为咱要删这个表里的数据,注意要明确啊,菜单角色关系表,咱们做分配操作,就是这张表,其他表数据都是固定的,然后在这张表里边表示它们之间的关系。就是我们一直说的多对多的关系。然后加个名字rapper等于上一个拉的rapper。加上之后rapper里边设置它的条件。咱们加上啊,加上这个。呃,应该不是menu ID是这个ID,根据角色ID。这个给它加上。然后从这里边给它出来啊。就是ID。完成完成之后调方咱们进行删除,那咱调一下啊,System menu service在里边,我们找到它的方法叫。
17:09
传入rapper,所以现在第一步就完成了,把之前分配的那个菜单,包括相关数据给它都删掉,然后之后第二部分我们从里边呢,把它那个菜单的集合给它取到。那咱取一下啊,Get menu ID得到这个集合,得到集合之后我们把它做一个。啊,咱给他便利一下啊。我写到这个位置。我们加上一个叫这个浪类型的menu ID。I list,然后上之后里边如首先如这个空等new对象最终加到表里面去。加一下啊。
18:00
加个if,如果说缀u.empty ID,它等于空,我们加上一个叫continue。这应该明确啊,Continue什么意思,是不是跳出当前循环,如果写个break,那就都结束了啊,咱加个continue,然后之后我们做添加。STEM肉。Menu。等于上这个对象像里边的设置,它的主要就是两个,一个菜单ID就是menu ID。还有一个是这个肉ID,角色ID就是这个啊,不是他啊角色ID。咱。这里边给它取出来啊。YD现代就可以了,最后调方法进行添加,它的方法叫C传入对象。
19:03
所以大家看啊,以上咱们就把这方法最终就完成了,就是我们写的这个过程,我在最后重复一遍啊,我们下一个方法就是为角色分配菜单,首先第一步把之前为角色分配的菜单数据先给它删掉,咱们删除菜单角色关系表里根据角色ID进行删除,然后第二个把这个里边的所有单ID到便利,然后一个一个加到数据库表里面去,最终实现我们这个功能。所以以上啊为角色分配菜单的接口部分,我们就最终完成了,以上是我们写的这个具体代码。
我来说两句