00:00
各位同学大家好,刚才呢,我们说明了权限管理中我们分为页面权限,操作权限以及数据权限,我们重点解释了什么是页面权限,什么是操作权限,那下面呢给大家具体分析一下这个权限管理在我们项目中我们该怎么设计,包括咱们具体该冷静实践,那咱下面来做一个详细的分析。我在这图里边给大家画一下。首先第一部分我们先做一个回顾,咱们之前提到了我们目前这个表它的结构是怎么样的,大家跟着我一起回顾一下啊,大家想一下咱们目前有哪些表。各位想一下哪些表咱们刚讲过,首先我们的第一张表什么表?咱们是不是有这个用户表,我这里写一下啊用户表,除了用户表之外,我们还有什么表?是不是有这个角色表,我画到这里啊,这个表叫角色表。
01:05
除了角色表之外,咱们应该还有一个重要的表,什么表?是不是叫菜单表?我写到这位,所以大家看啊,咱们目前有三张基础的表,用户表,角色表以及菜单表,而这些表之间,他们之间有一些相应的关系。大家要明确啊,首先咱看第一个关系,用户跟角色之间什么关系。什么关系,是不是一个多对多的关系,那这里给大家写一下啊,多对多,然后这多对多怎么去理解呢?我写到这我们可以这么理解。一个用户可以有多个角色。然后一个角色里边可以包含多个用户。这是我们说的第一个关系,用户角色是一个多对多的关系,而多对多的关系中,咱们建表的时候,在里边还有一张表,就是用户角色的关系表,我把这个写到这。
02:10
用户角色关系表,这三张表呢,我们数据的具体体现大家看到啊,就是里边的这个结构。你看这个硅谷OA里边第一张表。U色第二张表肉角色第三个表U肉用户角色关系表,这是我们说的第一部分,然后除此之外大家再来看角色跟菜单之间是不是也是一个多顶多的关系,而他的关系我在这里边同样给大家做一个描述。我写到这里啊,也是一个。多对多的关系,然后这个关系怎么理解?跟之前那个应该类似啊,用户跟角色是类似的一个角色。可以操作多个菜单,或者说对多个菜单有操作权限,而一个菜单可以属于多个角色,说的具体点啊,比如说我这个总经理,这个角色他可以操作用户管理,可以操作角色管理,而角色管理除了总经理之外,比如说这个销售人员也可以操作,这就是多对多的关系。
03:24
然后这个关系中同样有一张关系表,我画到这位置角色和菜单的关系表。以上啊是咱说这个表与表之间的关系,最终它的结构在这里边有个体现,大家看啊,这个是menu菜单肉角色,然后这个表示角色菜单关系表,这是用户,这是用户角色关系表。以上是咱说的表的一个结构,这各位要特别明确啊,咱们做权限管理中,基于这个结构最终进行实现,因为里边存入我们的相关的数据。
04:02
这个我们做一个说明,大家把这关系一定要特别特别清楚啊,然后这个之后我们继续往下来看啊,比如我们现在我们要实现这个权限管理,那大家想一下啊,咱们该怎么进行设计啊,或者这过程该怎么去做呢?大家跟着我一起来想一下,你要怎么去做。那这里边啊,怎么来说明呢?给大家说个具体例子说明,然后咱们再一点一点进行分析,那什么例子呢,我们来看啊,首先我这里写第一个。比如说现在啊,我有一个用户,这个用户呢,假如说是这个Lucy,这是一个用户,大家注意我们这个用户在我系统中是不是要进行登录,但是用户在在管理中有这么一个操作,首先我写一下啊,就是它里边的具体的操作,就是咱会具体再分析啊。首先它的操作一。咱们有用,那这个用户是不是要分配角色,这是第一个,比如说我现在啊,把这个Lucy。
05:06
给他分配这个管理员的角色,当然他可以分配更多角色,咱就以这为例,这一部分我们就完成了,然后完成之后我们继续往下来做,下面还有这个叫操作二。操作二是什么呢?咱们角色是不是可以分配菜单呀,就是你的角色可以对哪个菜单进行操作,比如现在我这个把管理员这个。角色给他分配了两个菜单,假如说就是两个,一个就是用户管理。小这里啊,用户管理,另外一个是他这个角色管理,包括角色管理中,比如让他能实现角色管理中这个添加。包括修改,然后用户管理中实验它的增,增加、修改、删除等等,就是CD啊这些具体的按钮操作,这是咱们做的第二部分,那这个做完之后大家想一下啊,咱们这个Lucy用户分配了管理员的角色,管理员角色呢又分配了菜单的操作权限,那这个时候我们用Lucy登录,那Lucy是不是有这两个菜单操作权限,一个用户管理,一个角色管理,这是咱们一个基本的过程。
06:29
我再重复一遍啊,比如我现在。有一个用户,用户要分配角色,角色要分配菜单,而你用户他就可以用角色分配的菜单进行相关的权管理,就是咱们刚才说的一个具体过程,Lucy分配的管理员,管理员能对用户管理模块、角色管理模块进行操作,那Lucy就能操作里边这个相关的菜单。这是咱们做一个说明,我把这段话给大家写到这个位置啊,如果你还没有听清楚,我这里再来写一遍。第一部分我们。
07:07
为这个用户分配角色,然后第二部分为角色分配菜单的操作权限,当然这个权限中包含菜单,包含你的按钮,比如你的增加,修改,删除等等啊都包含,那这个时候我们现在这个用户他就拥有了。这个角色的菜单。包括按钮的操作的权限,说的更通俗点啊,你角色不是登录,咱登录都是用用户,我用户属于某个角色,角色能做什么事情,用户就具备了角色的操作权限。以上是咱们一个最基本的分析。所以大家把这过程一定要特别明确,那这个之后,下面我们进一步说明。
08:00
咱进步来看啊,首先这个关系你要弄明白啊,它里面是怎么操作的,那下面再来看啊,就是现在比如说我们要真正实现这个功能,大家看怎么实现这个实现呢?肯定要写接口,整个前端咱们重点说这个接口部分,那这个接口呢,你看啊,我用户分配角色,角色分配菜单这个我们已经做过了,那用户要操作,首先第一部分用户是不是要登录。我这里写一下啊,总体的实现思路。它是怎么样的呢?就是咱们使用用户要进行登录。然后登录之后要获取用户可以操作的这个菜单的权限,当然权限中啊还包含它那个按钮,然后咱们进行显示和相关的操作,这是咱们一个总体思路,用用户进行登录,登录之后获取用户可以操作的菜单按钮的权限,比如说它里边显示用户管理,角色管理,那把菜单显示,包括里边有增加、接管,删除不同的按钮权限,我们进行相应的操作,这就是总体的设计思路。
09:16
以上啊是咱一个具体分析,然后这个具体我们要写的接口,咱要对照啊,我们之前的这个接口来看一下,那咱找到啊,之前在我们这项目中有一个index control,它打开大家看一下啊,之前有三个接口,第一个log。第二个叫F,第三个out是,所以按照这种操作。当然你也可以搬这种结构啊,咱为了更加的方便,咱们参考之前的结构最完善,那怎么完善,我这里写一下啊,就是咱们最重要写的呢,其实主要应该是有两个接口,这退出就不说了啊,主要是前两个接口,第一个接口那就是用户登录。
10:01
我写一下啊,就是最终我们要实现的会有两个接口,首先啊,就是接口一。咱们要实现用户的登录,这是第一个,然后第二个接口二要实现什么,就是你登录之后要获取用户操作的这个菜单的。或者说按钮的这个权限。操作就是可以操作的菜单和按钮啊,这么来写后续用户可以操作的菜单按钮,这是我们要写的两个接口。所以以上啊是咱们一个基本的分析,那这个我们要具体该对接口该怎么实现,咱们基本来说明。首先啊,咱们先看一下这个用户登录,我们该怎么去做,我这里边啊给大家来写一下啊,先看一下这个用户登录这个接口,我们进行详细的分析,然后最终我们再进行具体的实现。
11:02
那我把这个啊给大家写到这个下边啊,用户登录这个位置就是第一个。接口一,用户登录接口的一个分析过程,那咱们做一个具体说明,我把这个啊先往下画一点啊,咱们写到更具体点,首先啊,大家注意,我们登录的时候,咱们先来到登录页面,就这个页面,然后在登录页面中我们输入什么,是不是有你的用户名和密码,咱们点log进行登录,因为咱目前的接口只是给他返回一个固定值,一会儿咱这登录肯定要查询数据库进行操作,这是咱们要做的一部分,就是根据用户名查数据库,然后完成相应这个登录。那这里边啊,我来写一下啊。咱们这里边做一个基本的分析,一会儿我们会具体实现,首先第一部分我们要根据用户名去查询数据库,然后来查一下这个用户啊,它是否存在,或者他的信息是否正确。
12:10
啊,是否正确,这是我们要做的第一部分,然后这个信息呢,如果说不正确,那咱肯定就登录失败,如果正确的话,咱们就登录成功,当然过程中会做很多的事情,比如说检这个用户是不是存在,包括咱们看一下这个用户表里边我把表打开。大家看一下啊,在表里边呢,除了这个用户名密码之外,咱要查询属于最基础的,另外里边还一个字段,这个叫CS,表示用户是不是是否被禁用,如果是一可用,如果是零禁用,那咱就表示用户不能登录,所以要做这些事情,这里写一下啊,写的具体点,我们查数据库,看用户是否存在。如果说啊,这个用户存在,或者说你的信息是正确的,这个时候咱还要判断用户是否被禁用,就是用户是否可用,如果被禁用,那咱肯定也不能登录,这是我们做的第二部分,然后这个之后我们还有第三步,第三步做什么呢?因为咱们登录之后,我们是不是要保持登录状态。
13:21
什么叫登录状态,比如现在我登录之后啊,我在里边,比如现在我登进去,我在里边呢,点某个功能,或者说点某个菜单,某个按钮,这个时候还要判断一下当前是否是登录,或者当前对这按钮菜单有没有操作权限,所以咱们登录之后要保持你的登录的状态,这是第三部分写下啊登录成功之后我们要保持。登录的状态,就是咱后面操作都要做一个判断,然后这个状态怎么保持呢?有多种实验方式,我们这里边用这种方式进行实现,怎么做呢?写到这位咱们。
14:02
基于这个token进行实现,当然你可能还有别的方式啊,我们项目基于token来做到这个什么叫token呢?解释一下啊,你可以理解为我们现在登录成功之后。位置啊,咱们就是使用你的登录的这个信息,比如说有你的用户的ID啊,或者说你那个用户的名称等信息,咱们生成一个唯一的一个字符串,可以对这个生成的字符串进行一个编码。加密的这么一个处理,这是我们要做的事情,就是你登录之后生成一个回的字符串,对字符串进行编码和加密处理,然后处理之后怎么做呢?咱可以把这个。唯一的。这个字符串。到这里啊,唯一的这个字符串。
15:02
放到咱的cookie里面去,这是咱做的事情,而放到之后后面呢,咱们每次操作都写在cookie进行这个具体的判断,叫做cookie中判断值有没有,有的话是登录,没有的话就不是登录,这是我们目前的方式,这里写一下啊,把唯一字符串放到cookie中,然后从cookie中。我们可以获取到这个用户的信息。这是咱们要做的事情啊,但是cookie呢,大家注意啊,它本身有这么一个问题,或者说有一个缺陷。不知道各位同学是否清楚啊,我这里带着各位回顾一下,因为这属于JA外中的基础知识,在这里边给大家也特别说一下,如果说你对于cookie知识不是很了解,还是我的要求啊,把前面知识学好之后,再来学习本课程cookie什么特点,第一个客户端技术,然后第二个每次请求都会携带cookie,但是cookie有一个问题,什么问题?它是不能跨域传递的。
16:08
什么叫跨域,之前咱们解释过啊,咱说的具体点,比如说我现在前端的那个项目是9528的端口号,我们后端的服务。是这个8800的端口号,端口号是不是不一样了,这个时候就会产生跨域,就是你哭就传不过去了,所以咱这问题需要解决,怎么解决呢?我们的方式这么来做,就是解决cookie跨域,给大家说明啊。大家注意,我们知道一个技术叫HTP协议,在里边有请求跟响应,所以我们的做法就是每次发送请求的时候,把cookie的值获取出来,放到你的请求头里边,然后咱们每次从请求头里边获取到你的用户的信息。
17:10
这是我们目前的这个做法,这各位啊,给他要明确,我把这过程啊,给大家再来重复一遍,咱说一下这个该怎么去做,因为咱一会儿要用代码把这个具体实现。我再来重复一遍啊,过程虽然不难,但是里边做了很多的步骤,所咱有必要再来详细说一遍。首先我们注意啊,咱们做这个就是权限管理,我们总体的思想就是使用用户登录,登录之后获取用户可以操作的菜单或者按钮,然后进行显示,进行操作,这个过程中根据我们目前的结构,咱们有两个主要接口,一个是登录,一个是获取信息,而登录我们怎么做,按照刚才分析的。根据用户名查数据库,看数据库里面的用户是否存在,信息是否正确,比如你的用户名,密码是否正确,然后如果他正确的话,咱判断用户是否为禁用,如果禁用不能登录,没有禁用,那咱表示登录成功,登录成功之后我们要保持登录状态,因为一会儿你做别的操作,比如你一会儿获取用户信息啊,做其他的都要得到当前这个登录用户的信息,比如你的用户ID。
18:23
那这个时候怎么做?我们目前的方式基于token进行实现,当然你可以用别的方式,这token什么意思呢?各位可以这么理解,那就是一个唯一的一个字符串,比如说咱们根据用户ID、用户名称生成一个唯一的字符串,对字符串进行编码和加密处理,这是第一部分,然后把这字符串每次登录之后放到cookie中,从里边名字我们可以进行显示。但是这个cookie呢有个问题,它不能域传递,比如说咱们现在前端用的是9528,后端服务是8800,端口号是不一样,所以它不能快,就传不过去这个值,那怎么做?我们的方案就是每次发请求的时候,把库值先取出来,放到哪里请求头里边,因为每个请求都会有请求头,然后每次从请求头里边取到这个用户信息,通过它来完成后面操作,这是我们目前的解决方式。
19:26
以上是关于登录的一个分析,然后登录的时候呢,大家看第一行啊,我们要生成一个唯一的一个字符串,这个生成方式呢,你可以自己写个规则生成,但是我们这么来做,咱们用个工具,大家看我课件中啊,这个工具叫什么GWT。通过这个工具能生成一个唯一的一个字符串,并且对你的字符串进行编码和加密处理。它有一个重要的作用就是对token信息有防伪的作用,所以咱们一会儿用GWT这个工具生成一个token的字母串。
20:05
用它定实现,这各位明确啊,以上就是用户登录接口的分析,这咱就说到这里。然后这个接口之后呢,我们再继续分析啊,咱们来分析第二个内容就是登录之后,我获取用户可以操作的菜单,或者说里边的按钮。那我写到这里啊,这是第二个。接口二,我们做的事情就是登录之后。获取用户可以操作的菜单,包括里面那个按钮。那这个怎么做,咱们进一步给大家分析啊,来看这个该怎么实现。各位来看啊,之前咱们这个口是不是返信息,但这个信息里边咱这些都是写固定,目前肯定他不能这么来做,那目前我们要怎么去做,这里边啊,我们来写一下啊,它的具体的实验方式。
21:05
给各位写到这位置,还是按照刚才同样的过程给大家做一个详细的分析。啊,那我写到这里啊。首先,我们的做法就是第一步。这位置啊,第一步,因为咱前面是不登录了,登录之后呢,那这里边我们有登录的信息,咱们把信息是不是放到了请求头里边,所以第一步操作就是我们在接口中,从我们的请求头里边获取到你那个token的字符串,从字符串里边可以获取到你的那个用户ID,因为咱刚才看到这里边可以包含你的用户ID。这就是我们做的第一部分,在获取信息接口中,从请求里边得到你的用户的这个ID啊,这个我们做一个说明,然后得到ID之后我们怎么做写一下啊,咱们的第二步操作。
22:04
大家注意啊,我现在是不是有用户ID了,那咱现在呢,拿着用户ID是不是能查到用户可以操作的菜单,包括操作的按钮啊,第二步就来做这个事情。根据用户ID。去查询用户可以操作的菜单,包括里边的按钮。这个过程呢,它需要啊,这里写一下啊,先把这写完按钮,这个过程中呢,需要操作多张表,大家看啊,我最终菜单按钮是不是在这里位置,但这里边有关联关系,所以大家用用户根据关系表关联角色,再根据角色根据它再关联菜单,最终实现一个多表查询,查询用户可以操作的菜单,包括按钮。然后最终把数据我们进行返回,所以以上啊是咱们对于两个接口的一个分析,这个我们就说到这里,最后啊给大家再重复一遍。
23:08
咱们表结构更为明确,用户角色菜单,然后他们之间都是多对多的关系。在它的过程中,我们的实现的思路就是使用用户登录,登录之后获取用户可以操作的菜单,包括按钮,最终实现两个接口,一个用户登录接口,一个是登录之后获取用户可以操作的菜单和按钮的接口。这个我们就复印到这里,然后一会儿根据这个过程我们进行具体的实现。
我来说两句