00:00
各位同学大家好,前面呢,咱们完成了权限管理中的第一个接口,用户登录接口,那这个接口的时限流程给各位同学,我这里边再做一个强调,因为这个过程呢,它里边要做很多事情,希望各位知道里边的事现步骤,那咱们再来做个说明,首先权限管理的总体设计思路就是我们使用用户登录,登录之后呢,能够看到当前用户他所可以操作的菜单以及按钮。然后过程中涉及到两个接口,第一个就是用户登录,第二个登录之后得到用户可以操作菜单和按钮,所以咱们先完成是第一个接口,用户登录,然后用户登录怎么来做?主要是这么一个流程,首先根据用户名查数据库,看用户是否存在,包括判断密码,判断是否被禁用,之后呢登录成功,咱们要保持登录状态,我们目前的做法就是通过一个工具叫GWT,生成一个唯一的字符串,然后把字符串放到cookie中,在页面中进行显示。但是cookie呢,有一个问题就是它不能跨域传递,因为咱们前端是9528,后端是8800,两个端口号不一样,所以cookie后端它是取不到的,因为cookie不能跨于传递。那咱怎么做?我们的方案就是每次发请求的时候,把cookie里边的值取出来,放到请求头里边。
01:32
然后咱们每次从请求投里边取到这个用户信息,以上是咱一个基本过程,而里边这个cookie和请求投这过程咱是在前端做的处理,在后端接口中,咱们主要是生成token,最终把值进行返回,所以以上是咱完成的登录的接口,那登录接口完成之后,下面呢我们来做第二个接口,就是登录之后来获取到用户的信息,这个信息中包含两个,一个是菜单的操作权限,一个是按钮权限,就是用户可以操作有哪些菜单,然后菜单里边哪些按钮功能,比如说你可以做添加还是做修改,还是添加、修改、删除等等。
02:15
下面我们开始做具体实现,那怎么来实现?同样啊,我在里边把这个步骤给各位来写一下,然后咱们一步一步把我们的第二个接口进行实现,那我在里边给大家写一下啊,咱们来到这个位置就是第二个接口,这个接口。首先我们的第一步操作,咱刚才提到了,每次发送请求的时候呢,我们把库域中的值取出来,就是那个token取出来,放到请求头里边,然后通过它进行传递,所以咱们要做到第一步操作就是从请求头里边获取我们的用户信息,具体说是获取请求头里边那个token的字符串,这是第一个,然后获取token字符串之后我们继续来看啊。
03:06
给大家继续写一下,把token字符串获取之后,咱们从token字符串中获取它的用户ID,或者说这个用户名称,就是咱们得到ID就可以了,当然你也可以得到名称,根据实际来选取,因为大家看啊,我们生成的时候是根据什么ID和名称生成,咱们从里边可以把这个值取到,而生成和取得过程咱们之前都有工具类,这是生成的方法,然后大家看这个方法,还有这个方法是取的方法,一个从里边取ID,一个是取名称。那咱回到主题第一步,第二步做说明,那下面我们看第三步,我写到这位啊,第三步呢,因为咱们得到了用户的这个ID,第三步根据用户ID去查询数据库。
04:01
把这个用户的信息给它获取出来,比如ID是一啊,那大家根据一查数据库,把一的用户信息得到,ID是二,根据二查数据库,把用户信息取到,这是我们要做的这个事情,然后这个取到之后,下面我们怎么做,咱们进一步来说明啊,因为大家明确啊,咱们最终返回数据里边,除了这些数据之外,里边呢,应该还有两个数据,我这里先写一下啊,首先第一个数据。要返回,用户可以操作这个菜单。然后第二个返回用户可以操作的那个按钮,就是把这两个确认数据进行返回,比如用户能操作哪些菜单,能操作哪些按钮,这个我们要做到,那我在里边啊,我先写一个结构,咱们一块儿进行具体实现,比如第一个是他的菜单,这个名字呢,我跟课件中保持一致的啊,咱就叫这个,就这个路由。
05:04
啊,先写到这里啊,一会咱再完善,然后在里边我先来一个。第二个呢,是它这个按钮部分我们加个。然后加上这个叫buttons。这个我也先来个那一会儿我们进行完善。这是咱们要做的这个返回的地方啊,我先加个土度,表示需要完善的地方。这个最后说明啊,然后之后我们继续来看啊,就是这个第一步第二步第三步之后咱们看第四步我们要做什么事情,我这里边给大家进一步写一下啊,首先我们看啊第四步其实大家可以想一下,咱们现在呢,根据用户ID把用户信息已经到了,那第四咱们什么是不就得到那个菜单,包括按钮这个权限部分。那我们在里边啊,给大家把这步骤我们做个说明,我写到这里啊,第四步操作就是根据。
06:06
这个位置啊,根据用户ID。获取一下这个用户可以操作的菜单,这个列表或者菜单的部分就是具体说什么意思呢?给大家先简单说一下,一会儿咱会具体讲解,大家注意啊,我们现在登录系统之后,在我们这位置是不是有这个路由或者说菜单,而目前这个菜单咱们是写固定的,就是我们的前端的这个页面咱们找到啊中的里,我们把这个由部分是不写固定了,而现在我们要做这个权限控制,这路由就不能写固定,大家要怎么做,我们要查数据库,然后从数据库中动态构建出这个路由结构,就是那结构保持一致,但是咱是从数据库中查出来这个结构,这是我们要做这个事情,我这里写的够具体点啊。
07:00
我写到下面有一个补充。就是咱们要查询数据库,然后动态构建出你的路由的结构,进行最终的显示,也就是构建成跟页面中相同的结构,但是咱把这些值就是从数据库中查出来的,那咱看一下数据库里边啊,咱们找到。这个数据库啊,我把数据库我们先打开。然后在里边找到我们这个菜单表,看里边的机关特点,或者说呢,你看我们这个功能,其实也能看到菜单管理这个列表中就有这个功能,都是可以的啊,咱都看一下,先看我们这个表里边,我把这个打开啊。找到硅谷OA里边的menu菜单,把表打开,大家看到啊,在表里边有很多的字段,然后大家看里面的这几个字段啊,咱就看这个,一个叫pass,一个叫con,一个叫pro啊,这一个简写就是叫permission啊,咱就简写成pro。
08:05
然后大家看啊,主要是这几个结构,首先来看这两构,Pass什么意思,是不是径,这个径呢,对应的就是我们这个里边的这个部分,因为咱要根据它最终进行访问。还有一个叫对应的是什么?就是你指向那个页面,比如说咱们看这里边写固定地方是不是有页面啊,指样的就是它,这是我们看到的这么一个相关的结构,然后咱们从数据库中把这个查出来可以了,最终按照它这里边固定的格式动态构建出这个路由的结构,这是我们要做的这个事情。然后之后我们看第五步,第五步呢,跟第四步类似,咱们同样根据用坏递来获取用户可以操作的这个菜单的这个权限的列表,把这个得到,那什么菜单操作权限大家看啊,我们就直接看这里边,你看啊,我这是系统管理。
09:05
这是路由,这个是用户管理,然后这是路由部分,这是页面部分,咱们把用户管理打开,大家看这里叫权限标识,你看是不是很多值,咱就把这个值得到,然后后面在前端判断,比如现在当前用户能查到这个值,那对他可操作,如果这个值没有,它就不能操作,这表示按钮的操作权限,就把这个权限标识查出来,最终反而是一个列表,然后咱在前端再做相应的判断。这个完成之后,我们的第六步,就刚才写到的,咱们把对应的数据进行返回。啊,返回就是相应的这个。数据,这是我们做到的啊,而这过程中有同学可能会想啊,说你这里边的第三步是不是可以没有啊,其实可以没有,但是咱用第三步你看啊,根据用户ID,你看第四步,第五步有ID就可以了,第三步做的目的就是在这里,比如说你看我现在啊,有一个用户名称,这用户名称目前我是写固定的,但是现在我给他查出来,然后把名字进行显示啊,主要是做了这个处理。
10:15
以上是一个基本的步骤,但是步骤中我强调啊,第四步和第五步中还有很多的细节问题,对咱一会儿详细分析,目前先把一个总体流程给各位做个说明,那我这里边啊,把过程我再来重复一遍,我们登录之后在生成token之后,然后token放到请头里边,咱们获取用户信息主要是它的菜单还有按钮,那怎么做?第一步从请求头里边得到用户信息,就是token token里边呢到用户ID或者用户名称。然后取到之后,我们的第三步根据ID查数据库,把用户信息获取出来啊,当然也可以不查,因为这里边都有这个值,咱最终只用到ID和名称,但是我们给他也查一下啊,为了更加方便,然后第四步根据ID获取用户可以操作的菜单列表,也就是把我们这个路由部分通过数据库动态构建出来,而不是写固定。
11:21
之后呢,第五步根据用外地获取用户可以操作的菜单,这个按钮的列表啊,按钮列表这里写错了啊按钮。然后这个按钮是什么呢?就是咱刚才说到的。这个。就这里。通过它来判断当前用户是否可以操作这个按钮,最终返回相关的数据,以上就是一个基本过程,那这步骤写完之后,下面呢,咱按照它来具体写一下相关的代码,那我们来看一下啊,第一步从请求头里边获取数据,那怎么做呢?我们在里边呢,加上一个参数。
12:01
TP request,因得咱request geter,加上我们的名字叫,后面也给它前端改成ER,这就得到请求头里的to字符串,这是我们的第一步,然后得到之后第二步我们通过JWT的工具类,从里边取到这个用户ID,或者说用户名称都可以取到,咱就取到一个用户ID,这个得到,然后得到之后第三步,我们根据用户ID得到用户的信息。那咱们给他获取一下啊,我们调这个方法。System user service,然后里边一个方法,根据用户ID得用信息,那我们找一下这个方法啊,这个方法咱们看一下叫get by ID,根据用户ID。
13:05
得到用户信息,咱就叫这个system user这步完成。这个问题要明确啊,因为咱们现在ID嘛,那就是根据ID主直接查这数据,把这个就能得到啊,就这个表这给他查到,然后之后我们的第四步,根据用户ID获取,用户可以操作这个菜单的列表。那咱看一下啊,因为是操作菜单嘛,所以我把这个菜单的service给它先进来。加上啊,System menu。Service。把这个注入啊。Menu咱们调这里面的方法进行实现,这方法一会咱们进行具体的写,我这里加一个方法啊find啊,我们叫这个user menu就是用户菜单嘛,然后这里边是一个它的这个列表。
14:02
根据用户ID。进行获取。在里边啊,加上用户IDID。就是我们写的这么一个方法啊,然后它最终返回的是一个list集合,咱们给它起个名字叫这个route,呃,List就是它了啊,在里边加上一个泛型,这个泛型呢,我们写好了一个view类,叫这个router。不由。就是它啊,大家看root VO呢,有很多相关的属性,这个属性我们的目的是什么呢?为了构成我们这个页面中这个相同的结构,再加了一个view类啊,所以咱们就给它做一个返回,这是咱们解的这个方法。然后这个方法写完之后,我们在service里边把这方法先进行创建,给咱一会儿进行实现啊,先创建出来。创建之后,在实现类中把这个方法也是先创建出来。
15:03
也就是这个方法。所以这部分完成完成之后继续往下来看啊,下面根据用户ID获取用户可以操作那个按钮的这个权限的这个菜单,按个列表加上法,这法我起个名字user按。啊,就简写permiss啊,就是简写成它加上一个user ID。里边传入。用户ID,根据用户ID进行查询。然后最终啊,同样返回的是一个list集合。啊,咱们叫这个。List。这个例子呢,返回到就是咱们刚才看到的就是这个值啊,咱就看这个页面中啊,就是它这它应该有就是一个普通字符串啊,咱就在泛型中加上一个词缀。
16:06
这个给它加上啊,然后这个加上之后,我把这个方法在service里边,我们快速做创建,也就这个方法。在实现类中,把这方法我们也是快速给它实现下。所以以上啊啊,这部分就完成了,完成之后往下来看啊,最后返回相关数据,然后数据中第一个角色啊,其实这个咱没有用到,给大家写一下啊,第二个就是当前那个用户的名称,我们通过这个对象把它取下,咱用这个get name啊,当然这个名称你也可以直接啊用那个username,根据实际或者说你不查,就看你什么样的需求啊,我就通过这个查出来得到,然后最后有这两个集合,一个是ru VO list的,还有一个叫per list的。这个啊,咱给它最终退,所以大家看啊,以上我们就把这个CTRL部分就完成了,获取用户信息。
17:08
得到请头里面的token,从里边取到用户ID,根据用户ID查出用户对象,包括查到它的菜单列表,还有它可以操作的按钮列表,最终把数据进行返回,然后前端我们进行最终的这个显示,这部分完成,完成之后呢,我们下面要做的就是在service里边把最终的这两个方法进行实现,就刚才看到的这两方法。然后这里强调啊,这两方法要进行操作,肯定是一个查询操作,但是查询中大家看到啊,我这里参数是不是用户ID,然后根据用户ID查出他的菜单的,包括按钮的相关内容,但是这个查的话,如果说你直接查这个菜单表肯定没法查,因为里边没有用户ID,所以这个过程中要涉及到就是多表的查询,就是一张表我们肯定查不到,需要多表的关联查询才能得到,那这个怎么做,得先做个简单说明,一会儿详细分析。
18:11
大家注意啊,我们现在查数据库或者说操作数据库用的技术叫买的plus,比如说大家发现啊,咱们当当前做了这么多功能,好像没有写到搜Q语句是没有写到,而现在你要做多表关联查询,就需要用到这个插M文件,然后在里边要编写S后L语句了,因为它涉及到多表的查询,直接用MP它就很难做到了啊,咱需要编写语句经实现,当你不编语句不是说不能做,需要做很多的步骤,比如说你这一步查查询出这个,下一步再进行查询,所以咱们这个功能中就直接编写语句进行实现。目前我们先讲到这里,然后一会儿我把这个具体该怎么写语句,包括怎么实现给各位,在做详细的分析,大家就是知道里边这个实现的过程,把这过程要特别清楚,包括登录,包括获取用户信息。
我来说两句