00:00
好,那那我们继续编写有关用户管理模块的一些服务,对吧?我们现在我们已经编写了user service,呃,实际上它基本上是对应了我们数据库里面的user表,对吧?包括road service呀,呃,Permission service对吧?Permis service它基本上对应了我们的permission这张表,呃,实际上在我们的这个云台in这个数据库里边,其实它还有几张表对吧?比方说还有两张,呃,还有一张用户角色表,那么还有一个角色权限表,所以说我们呢,也针对这两张表呢,也写一下服务,那在这里面的话呢,就是我们写一个。呃,什么呢,叫做user service,好,呃,那么在这个服务里边,我们写我们要实现什么功能呢?第一个就是根据用户ID。获取什么呢?呃,获取角色ID这样的一个,呃就是说功能对吧,当然这个功能呢,呃实现起来也比较简单,实际上就是一个简单的呃CQ查询对吧,所以说我们还是把之前的这些什么串啊之类的给它复制过来啊好,那么这个我们已经给它复制过来以后呢。
01:23
呃。但是这个复制的效果不是特别好啊,然后在这儿的话呢,诶我们。给它加一个画括号,然后的话呢,我们再把这个catch给它复制过来,对吧?呃,也就是捕获异常的这个代码,因为这些代码实际上都是样板代码啊呃。OK,当然我这个还没有命名函数名对吧?所以我们在这里面的话,Public static get roll ID by user ID,使用用户ID来获取角色ID,对吧,我们继续我们重新来进行复制。
02:11
好,你在这儿的话,先把它复制过来,然后呢,当然我们这边需要一个画括号,然后我们再复制一个,呃,补货异常的这样的代码,对吧,补货异常的代码好。OK。呃,那这样的话呢,我们的样板代码实际上基本上就写好了,呃,当然就是说如果我们在没有查根据用户ID,如果查询不到任何角色ID的话呢,我就直接返回nall对吧?呃,直接返回now,然后在这里边的话呢,我们的这个链接呢,你不要忘记把它关闭好,然后呢,我们现在就可以开始构建查询语句了,Select statement,呃。那么它是一个statement对吧,然后在这的话就是select ID from。
03:10
User row这张表对吧?Where user ID等于一个问号对吧?一个占位符,然后呢,我们把这个占位符呢给它写进来,呃,是U的ID,然后呢,我们就可以开始查询了,对吧?然后呢,Result set等于select statement.query然后在这的话呢,是一个long ID等于那对吧,我们先给它初始一个,那初始化一个nu,然后把查出来的呃角色ID呢给它赋值就可以了,对吧?所以说在这儿的话呢,那就是如果result set.next的它为帧的话,说明我们查询到了数据,对吧,然后呢,就对它进行赋值就可以了,然后在这的话呢呢,就是get一个浪roll ID对吧?然后呢,我们把这个获取的roll ID给它返回,就呃,完成了。
04:10
呃,这个方法的编写对吧?当然你在这儿的话呢,不要忘记,呃,把这个语句也给它关闭掉,对吧,我们有始有终,好,那这个就是根据用户ID获取角色ID的一个呃方法啊,然后接下来的话呢,我们再来写一个。插入数据库这样一个操作,那就是添加用户和角色的呃关系,呃那么添加用户和角色的关系呢,我们从文档上其实我们大概可以知道,就是说呃,你除了第一个字段主建以外,我只需要把用户ID和角色ID给它插入进去,呃就我们就相当于插入了一条反映用户ID和角色ID的关系的这样的一条数据,对吧?呃也就是比方我们这条数据呢,就表示用户ID唯一的,它拥有角色IDE1对吧,拥有ID唯一的呃这样的一个角色,所以说我们只是把这个插入语句呢,给它实现到呃代码里边,呃当然在这的话呢,我们还是一个静态方法,当然它由于是一个插入语句,所以说呢,呃它并不需要返回任何值。
05:24
然后我们的函数名呢,叫做ADD user,对吧,ID role ID relation。Ship对吧,它们之间的关系,当然它就是两个呃参数,第一个是user ID,第二个呢是呃,Long roll ID,好,然后呢,我们还是把这些样板代码呢,就你可以直接给他全复制过来对吧?直接给它复制过来,然后把一些代码给它删掉,比如说这个什么弱ID呢,这个你肯定是不需要的,对吧?呃,包括这些语句呢,实际上我们都会呃重新编写对吧。
06:07
好,我们都给它删掉,OK。好,接下来的话呢,我们首先第一步要做的是先把呃什么呢。当然就是你添加这个用户和角色关系的时候呢,呃,由于我们这里边实际上是假定了,呃,一个用户他只有一个角色,所以说我们可以先怎么样呢?我们可以先把用户的用户在用户角色表中的数据删除,对吧?因为我们因为我们默认了,默认了一个用户只有一个角色,对吧?呃,所以说这里面我们就按照这样的一个逻辑来,呃来实现delete statement等于点,然后呢,它from user row这张表对吧?Where user ID等于一个占位符,然delete。
07:18
点set long1user ID,好,那这样我们就删除了啊,当然你别忘记执行它,OK,那么接下来的话呢,我们删完以后呢,我们就开始插入user ID和rule ID的关系,对吧?呃,我们在这的话,我们构建一个insert statement,等于connection.prepare statement,然后呢,Insert into user row,我们有两个字段需要插入,对吧?一个是user ID,还有一个呢,就是role ID,然后呢,在后面我们再写一个values,然后呢,我们这里边是两个占位服,一个是用户ID,一个是角色ID。呃,那么在这的话呢,我们就是insert statement set long1user ID,对吧?
08:17
Insert statement set long2若ID,然后呢,执行它就可以了,对吧?那这样的话呢,我们就把某一个user ID和某一个row ID呢,对吧?给它插入到了user road这张表里边,对吧?给他们建立了一个关系,也就是说这个用户ID呢,拥有了这个角色对吧?好把这两个语句呢关闭掉,OK,那这样的话呢,我们user这个呃,Service或者说这个服务呢。我们就都已经写完了,对吧,我们就都写已经写完了,那接下来的话呢,我们还要写一个什么呢?当然我们还要写一个role permission service,对吧,也就是反映和。
09:02
就是说角色和权限的表所对应的增删查改的服务,对吧,那在这的话呢,就是permission service好。OK,那么我们要实现的第一个方法呢?当然就是根据角色ID获取角色所对应的所有权限这样的一个方法,对吧?那就是public static list,那么它的返回值呢,是一个permission组成的列表,对吧?因为我们要获取的是呃,角色ID所对应的,对吧?所有的权限,那就是get permissions by rule ID对吧?也就是我们这个方法名呢,最早起的,呃,比较有意义一些,好,然后呢,他接受的参数呢,当然就是一个角色ID了,呃,就是一个角色ID,好然后呢,我们还是一个try catch CQ exception class not found exception,然后呢,1.print,呃,Sta返回一个空列表,对吧?也就是说如果我们什么都没有取到的话呢,我们就返回一个空列表,呃,然后在这的话呢,当然我们这个TRY这儿呢,我们就可以把这些classl for name啊,以及获取连接的这个代码呢,就直接给他拷贝过来了,好,直接给他拷贝过来啊,那我们如何来获取一个角色ID所对应的它的。
10:48
所有权限呢,呃,我们都知道这个role permission这张表,实际上它存储的就是呃,角色ID和权限ID的一个关系表对吧?一个关系表,所以说呢,我们现在的话呢,我们可以从肉permission这张表里边呢,先把角色ID所对应的权限ID都给它取出来,当然在这的话,你不要忘记把这个关闭掉,好我们先来构建一个select permission这样的一个查询语句,然后在这的话呢,我们是从角色权限表对吧,那就是select permission。
11:35
然后ID from permission where iidd等于一个问号。呃,当然在这儿呢,我们把它的占位符给呃写一下,那它站位符呢,显然就是一个弱ID了,对吧?呃,然后呢,我们就可以来进行查询了,对吧?当然查询的话呢,就是说呃,我们获取的所有的权限叫做。
12:08
All permission这样的一个呃列表吧,好,然后呢,当然这个列表里边的呃元素类型呢,它就是一个permission,呃这样的一个类型,对吧,或者说啊,不应该是permission啊,因为我们查出来的这个permission ID是long类型的,所以说这的话呢,应该是一个浪类型的,好,应该是一个浪类型的,OK。呃,然后呢,我们的查询结果呢,就是等于select permission.cute query对吧?呃,当然由于他查出来呢,可能是呃由于我们一个角色的ID,它有可能对应了多个权限ID对吧?所以说我们这里面我们要用一个while循环把呃这个查询结果呢给它拿出来,好,那这个就是all permissions.ADD对吧?呃,每查出一条呢,就把它放到列表里面。
13:06
Get permission ID,好啊,那这样的话呢,我们就拿到了这个角色ID所对应的所有权限。呃,对吧,这个角色ID所对应的所有权限,呃,然后接下来的话呢,我们要做的事情是什么呢?呃,接下来的话呢,我们,呃,首先我们先在这打一个注释吧,那这个就是角色ID对应的所有权限ID组成的列表,哎,这个我们已经实现了,那我们接下来,呃,我们要做什么呢?接下来我们就要把所有的权限都查出来,对吧?或者说读取所有权限,那么如何去读取所有权限呢?呃,我们还是来构建一个查询语句select,呃,Permission statement等于点prepare statement对吧?啊,在这儿的话呢,我们就是select芯from permission,也就是从permission这张表里。
14:18
边呢,把所有的权限都给读出来,呃,读出来以后呢,呃,我们选择把它放在哪里呢?我们选择把它放在一个也是放在一个列表里面吧,Va permissions,对吧,等于new一个a real list,然后它的这个类型呢,是permission,好,然后呢,Va result,当然我这个result set的话呢,可以,呃,你可以直接重新赋值对吧,你也可以说呃,我们这里边我们写一个permiss set等于select permission对吧,Execute query,好,那这样的话呢,我们就获取了所有的权限数据,对吧,然后我们把这个所有的权限数据呢,通过一个。
15:11
呃,While循环给它放到我们这个permissions对吧?它用来保存所有权限数据,用来保存所有权限数据放到这个列表里边好,然后呢外permiion等于new一个permission这样的一个类,对吧?然后呢,我们现在把它每个字段都set一下permission.set ID,那就是permission result set.get long。呃,当然这个第一个字段呢,就是ID,然后呢,permission.set什么呢?Set这个parent ID对吧?那就是permission result set,点呃,Get parent ID,然后呢,permission.set permission name,然后点get string对吧?那这个就是permission name permission.set permission code result set.get string对吧?Permission code OK,好,那接下来的话呢,我们就可以把这个查出来的每一个权限数据呢,给它添加到列表里面,对吧?给他添加列表里面啊,当然在添加列表之前呢,我们需要再做一件事情。
16:41
对吧?做一件什么样的事情呢?那就是如果all permissions.contains对吧,permiss.get ID OK,然后呢,permission.set select处也就是这一句表示什么呢?这一句表示如果用户的对吧,或者说如果角色对应的权限中包含当前便利的权限,那么将。
17:22
什么呢?对吧,将这个permission的select字段置为处,也就是它主要是用于哪里呢?用于前端分配权限时的数形菜单,对吧,我们一会儿呃,把这个控制器编写完,然后运行起这个后端来,然后我们再使用前端的时候,诶你就知道。这里边的这个permission点的set select,它到底是在干嘛了,对吧,它到底是在干了,好,然后接下来的话呢,呃,我们再来做一件事情,那就是va permission list等于。
18:17
Permission,然后点build。Permissions对吧?构建一个树形菜单,或者说构建一个树形权限对吧?构建一个树形权限,我们build一下,呃,也就是说呃,把权限的子权限呢给它填进去,然后我们就可以开始返回了,我们就可以把这个permission list给它返回了,好。当然。不要忘记把我们上面的呃这些语句呢,都给它关闭掉,对吧,比如说这个select permission。
19:00
Permission close对吧?Select permission statement close,好,那这样的话呢,我们就呃完成了根据角色ID获取角色所对应的权限这样的一个呃功能,对吧,这样的一个功能,好,当然就是说呃这个功能的话呢,呃我们要明白它主要是做了一个什么样的事情,对吧?它主要做的事情就是首先把角色ID对应的权限都给他取出来。呃,然后呢?再把所有的权限取出来,然后把其中对吧,这个角色ID拥有的权限呢,把它的select都置为true,要把select都置为true。然后构建一个树形权限,然后把这个权限列表呢返回,那这样的话呢,我们就获取了一个角色所对应的权限的呃这样的一个列表,并且可以把它渲染成一个树形菜单对吧?呃,渲染成一个树形菜单好,那么第二个的话呢,就是添加角色和权限的关系对吧?也就是说把角色ID和权限ID呢,给他写入到呃数据库里边,好,当然它也是一个void ADD RA permissions对吧,它俩之间的关系,它接收两个参数,第一个是角色的ID,第二个呢,是一个列表,那么这个列表里边是什么呢?这个列表里边就是呃权限的ID对吧,所组成的列表啊,为什么呢?主要的原因是因为我们想要添加角色和权限的关系的话呢,而一。
20:44
那角色ID。可能对应多个权限对吧?一个角色ID对应多个权限ID,因为你一个角色它一定会是拥有多个权限的,对吧,很少有情况说是一个角色只有一个权限对吧?所以说我们这里边我们要构建的一个关系呢,是角色ID和一个权限ID组成的列表,对吧?我们要把这样的关系呢,给它插入到数据库里边,呃,所以说在这的话呢,我们还是先把这个踹给它,呃,复制过来对吧?把这个踹给它复制过来啊,然后接下来的话呢,我们复制到这里,然后划括号,Catch c exception class not found exception e一点print对吧?好,接下来的话呢,我们第一步要做的事情是什么呢?第一步要做的事情当然就是将角。
21:47
四。将角色roll ID所对应的所有角色权限对应关系对吧,都删除掉。
22:08
对吧?也就是说我们第一步要做的事情是什么呢?首先由于我们都知道这个role permission这样的一张表,对吧?Role permission这样的一张表,它里边保存了每一条数据都是,哎,一个角色ID,一个权限ID,所以说我们第一步呢,我们就是要把这个角色ID在角色权限表里边的对应关系都删除对吧,的对应关系都给它删除掉,那么怎么删除呢?呃,当然非常简单,Delete statement等于connection.prepare statement对吧?然后呢,Delete from row permission where row ID等于问号,好,然后delete,然后我们直接执行它,对吧?当然你在执行之前的话呢,你不要忘记填这个。
23:08
呃,占位符好,那这是第一步,那第二步的话呢,那就是将角色和权限的关系插入到角色权限表当中,好。那我们怎么插入呢?当然我们构建一个插入语句,对吧?Insert statement等于connection.prepare statement,然后呢,它是一个insert into role permission,对吧?然后呢,我们要插入的是role,哎,一个role ID,一个permission ID,对吧?然后VALUES2个问号,好,然后接下来的话呢,我们就for循环案便利一下,Permission ID permission ids,对吧?我们for循环遍历这个列表对不对?我们为什么要遍历这个列表呢?那就是因为我们一个权限IID要一个角色ID要和权限ID列表里边的所有ID都要配一次对。
24:28
然后插入到数据库里边对吧?所以说我们每遍利一个呢,我们呃,就把它的占位符,第一个占位符,当然它一直都是弱ID,那么第二占位符是什么呢?那就是我们遍历的这个permission ID对吧?然后呢,插入对不对,那这样的话呢,我们就比方说我们现在如果我的角色ID对不对,如果的角色ID是一。对吧?然后我的权限ID的列表呢,比方说是二和三,那么我插入的数据是什么呢?我要插入一个一逗号二,我还要插入一个一逗号三,对吧?呃,实际上它做的就是这样的一个事情,对不对?我们便利他一下,好,那这样的话,我们执行完成以后呢,呃,不要忘记把我们的列表都给呃这个查询语句呢,都给它关闭掉,对吧?然后呢,把我们的连接也关闭掉,好这样的话呢,我们就实现了呃添加角色和权限关系的这样的一个功能,OK。
25:40
啊,那我们现在服务基本上写的差不多了,那还有一个最后一个服务呢,那也就是我们在。登录的时候所需要用到的服务,对吧,因为你登录的时候实际上是要获取某一个用户他的,呃用户信息,所以说在这的话呢,我们就要再写一个叫做index service这样的一个类,对吧,也就是说。
26:06
用户登录获取用户信息时使用对吧?啊,那么这里边我们只需要写一个方法就可以了,那就是public static user logging info对吧,我们的返回值是一个user logging info这样的一个并类,然后get user info,呃,我们使用用户名来获取呃,它的用户信息对吧?首先的话呢,Y user等于我们调用这个user service.get user by name对吧,就是根据用户名来获取用户信息,好,然后呢,如果我们获取的这个用户信息不为空对吧,也就是你为空的话呢,你就直接返回一个那就可以了,那如果不为空的话呢,那么我们就要根据用户呢获取它的。
27:07
根据用户ID获取用户。的权限列表,也就是可以访问的菜单列表,好,那么在这的话就是va per permission。By user ID对吧?这个我们之前在permission service里面我们已经写过了,呃,Get permission by user ID,好,那么这个user ID是什么呢?那就是U的点get ID了,对吧,好。然后呢,Y user logging in for等于我们又一个user logging in for对吧,实例化一个空的呃,并实例,然后呢,User logging for.set username user.get username对吧?然后user logging for.sets。
28:08
而这个center这个route是什么意思呢?对吧?啊,当然我这个route呢,实际上我在这个user log,我们可以看一下,我已经把它初始化为一个空的,呃哈希呃,Set对吧,也就是初始化成了一个空的这样的一个集合,所以说我们直接get RO。然后点ADDO,对吧,Permissions by u的ID,也就是说这个route这个字段是什么意思呢?这个root这个字段就是表明我们用户可以访问的菜单列表,或者说权限列表,那我直接把这个权限给它添加进去就可以了,对吧?添加进去就可以了,好,然后在这的话呢,我们就return一个user logging就OK了,那么到现在为止的话呢,我们的所有的服务,就是说用户管理模块或者说权限管理模块,所有的服务呢,就都已经写完了,那么接下来的话呢,我们就可以开始写控制器的代码了。
我来说两句