00:00
好,那我们接下来的话呢,我们就继续编写权限服务对吧?我们现在已经有了用户服务,呃,有了角色服务对吧?我们再写一个权限服务,实际上就是针对权限方面的一些数据库的增删查改,对吧?所以说在这的话呢,就是一个permission service,好,那这个就是权限服务对吧?那就是针对权限的一些数据库的增删查改对吧?针对权限呃的一些数据库的增删查改,好那么在这儿的话呢,呃,当然我们还是第一个就是获取所有呃权限这样的一个方法,对吧?获取所有权限呃,这样的一个方法,好,那么在这的话,当然它还是一个静态方法,Public这个list,然后呢。当然是我们的这个permission这样的一个病类,对吧,那就是get all permissions好,呃,当然在这的话呢,其实他写的代码都大同小异,对吧,就是你肯定还是呃,为了建立和数据库的一个连接对不对,那么还是一个串,呃然后呢,把这个建立连接以及驱动类的代码呢,给它贴过来就可以了,对吧,因为用的都是同一个数据库嘛,呃,然后呢,当然你还要把这个就是说。
01:26
实际上这些都是样板代码,就是呃。抛异常对吧,或者说捕货异常的这个代码呢,也给它贴过来啊,那么贴过来以后呢,我们如果查询不到任何的东西的话呢,我们就返回一个空列表对吧?呃,那这样的话呢,我一个样板代码的构建呢,就已经构建好了,呃当然在这的话,你还是要写这个配对的,呃关闭啊连接的操作对吧,实际上就是我这样的一种写法呢,其实有点类似于呃使用note JS啊,或者使用go来写后端API的一种方法,对吧?所以所以说我们这样的一个知识呢,其实它是呃可以迁移的对吧,实际上在呃其他的一些语言里面,比方说,尤其是现在比较流行的勾烂对吧,它实际上里边呃很少说有什么控制器呀,服务呀等等,或者说什么OM这样的一些呃概念对吧,当然当然也有类似的框架,但是呃。
02:25
可能用的人就不像在Java呃这边呃会特别特别多,对吧,它比例没有并没有那么高好。啊,那么我们在这的话呢,我们还是一个腕permissions,你有一个呃,A list,对吧,用来存放我们查询到的结果,好,然后接下来的话呢,我们就开始构建查询语句,Select statement等于connect.prepare statement对吧?然后呢,在这的话就是select,呃,实际上我们字段不多的话呢,其实你可以直接来一个select,其实也是可以的,对吧,然后呢,From permission,哎,这样就完了,这样就完事了,对吧?呃,这样就完事了,然后呢,我们select statement.execute query.y对吧,那这个就是它的查询结果,呃,当然在这儿的话呢,你可以把它为了统风格统一呢,可以把它改成一个万,对吧,我们让它自己去类型推导,然后呢,在这儿的话呢,你也不要忘。
03:36
忘记说把呃这个给它删除掉啊,就是说把这个语句给它关闭掉,然后呢,Return一个permissions这样的一个结果对吧?好,然后现在呢,我们从结果集合里面呢,把它取出来,那就是while while什么呢?While这个result set.next如果它不为空的话。对吧,那么我们就玩一个permission,等于new一个permission这样的一个并类,对吧,然后我们就开始呃,Set它的每一个字段,当然你你最后你肯定是要呃把它。
04:14
添加进来的对吧,把它添加进来的好,我们现在我们就可以permission点,首先你一个set ID对不对,Set ID的话呢,就是result set get along,那么这个就是ID,好,然后permission set,比如说还有parent ID,对吧,Result set。然后呢,也是get了,那么就是。Parent ID对吧,那这个也就没有问题了,好。呃,然后呢,我们还有就是permission.set permission name对吧?呃,权限的名字get string,然后呢,这个就是permission name对吧?然后permission set permission code对吧,它的编码。
05:09
啊,那么这个也是一个get string对吧,那叫做permission code,好啊,那这样的话呢,我们就把权限数据呢,都给它取了出来,然后呢,添加这个列表里边,然后我们要根据这个取出来的权限,根据获取的所有权限构建权限树形结构,对吧?树形结构啊,实际上这个构建树形结构呢,呃。由于我们都知道,就是说这个permission这个类里边,你可以看到它实际上有类似于像level呀,呃,包括它这个权限的子权限啊之类的,对吧,所以说我们需要呃,把这个permission这个病实例里边的,呃,它的所属的这个层级level以及它的子节点呢,都给它填充上,对吧?啊,当然这个填充的方法呢,我们之前显然已经是编写过了,对吧,显然已经编写过了,所以在这儿的话呢,我们就是一个permissions等于什么呢?我们给它重新赋值,我们使用什么呀,Permission help.build。
06:20
对吧,Permissions,那这样的话呢,我们就构建出了一个树形结构,实际上。就是把permissions里边的每一个并实力的对吧,Level字段以及children对吧,这个孩子字段呢,给他填上去,给他填上去啊,那这样的话呢,我们就完成了获取所有权限这样的一个操作啊。呃,当然的话呢,我们还要有一个呃方法呢,是什么呢?还要有一个方法就是根据对吧,根据用户ID获取用户对应的所有权限,对吧,这样的一个呃API。
07:14
对吧,我们需要有这样的API,因为我们后面我们控制机会用到它,就是说根据用户ID呢,获取用户对应的所有权限,那我们来回顾一下,就是说诶我们的用户ID,我们首先我们应该怎么查询一个用户ID对应的所有权限呢?对不对,我们这边我们可以看一下,首先我们根据用户ID。可以在用户角色表里边查出用户ID对应的角色ID,对不对,对应的角色ID,然后呢,我们这个我们可以根据用户ID呢,在用户角色表里面查出用户ID对应的角色ID,然后我们在。使查出使用这个查出来的角色ID呢,在角色权限表里边,我们又可以查出对吧,用户对应的角色ID。
08:11
它所对应的权限ID对吧,然后我们再查出权限ID来以后呢,我们就可以从权限表里边把对应的权限查出来,所以说你这边你可以看到它涉及到了什么呢?它涉及到了好几张表,实际上它涉及到了三张表,这样的连表查询,对吧,也就是。用户角色表对不对。以及角色权限表,还有权限表三张表的连表查询,你这样才能查出一个用户ID所对应的所有权限,对吧?所以我们在这的话呢,呃,我们就可以来在JDBC里边呢,写一下这个联表查询,对吧,Public static list对吧,我们查出来的权限呢,是一个string啊,对吧,是一个string string的列表,或者说呃,就者说权限编码的这样的一个列表,然后呢,就是get permission。
09:12
对吧?By u的ID,当然它接收的参数呢,是一个U的ID,然后呢,我们还是把上面的这些样板代码呢,直接给他拷贝过来,对吧?直接给他拷贝过来,然后呢,把try cash这里面也给它拷贝过来,OK,好,那么拷贝过来之后呢,当然在这的话就是你不要忘记,呃,把这个连接给它关闭掉,对吧?呃,因为这个连接是非常宝贵的资源,所以说我们一定要把它关闭掉,然后在这儿的话呢,你最后防御式的编程,不要忘记return一个空的列表,对吧,不要忘记return一个空的列表,呃,好,接下来的话呢,我们就来构建一下这个相对比较复杂的连表查询,对吧?相对比较复杂连表查询y select statement等于connection.prepare statement。
10:13
好,然后呢,就是select permission permission code,呃,实际上我们要查的是某一个用户ID,它所对应的权限编码,而这个权限编码其实就是前端的。什么呀,组件的名字对吧,那这样的话呢,我们通过这个方法,我们就可以返回一个用户他可以访问的前端的组件的什么呀,一个列表,对吧?那我返回给前端的话呢,那前端就可以根据这个列表呢,来把你可以访问的。呃,菜单给它渲染出来对吧,好,我们在这的话呢,我们就可以as permission to,给它取一个别名吧,From user对吧,首先是用户表,我们根据用户表呢,呃。
11:12
把它对应的这个。呃,当然就是说你在这,其实你不用这个用户表也可以的,当然也可以使用一下啊inner join对吧。有。对不对,然后呢,我们在这里边继续招引对吧,招引什么呢?招引role permission对吧,然后呢,继续招引permission这样的一张表对吧?继续招per permission这样的一张表好。呃,那么接下来的话呢。我们开始写连表查询条件,对吧?On user.id等于user.user roll.user ID。
12:08
对吧,然后呢,还有就是按的操作对吧,User roll.row ID。对吧?用户角色表里面的角色ID呢?它显然应该等于角色权限表里面的角色ID,对吧?Role permission点呃,Roll_ID然后再来一个案子,那么再来一个案子的话呢,就是roll permission.permission ID等于什么呢?permission.id。对吧?也就是说你角色权限表里面的权限ID呢,要等于权限表里面的主键ID对吧?然后在这的话呢,就是y user.id等于问号对吧?好,那这个就是一个相对有点复杂的连表查询,好,Select set long1user的ID我们只写,呃,我们填上这个占位符以后呢,Result set等于啊,Select s.XQ对吧?执行这个查询,那么执行完这个查询以后呢,当然我们需要有一个列表来存放查询结果,对吧?啊,那它是一个string啊,然后while循环result set.next如果它这个迭代器不为空的话呢,我们permissions.ADD呃,填些什么结果呢?Result set.get string。
13:45
Permission code对吧?哎,把这个权限编码给它填进去就好了,OK,然后接下来的话呢,我们不要忘记return permission。
14:00
呃,还有呢,就是不要忘记把我们的这个查询语句给它关闭掉,OK,呃,那这样的话呢,我们就编写完了根据用户ID获取用户对应的所有权限的这样的一个代码,对吧?呃,那你实际上你可以把这两上面的两个方法呢,给他测试一下,比如说我第一个我要测试的呢,就是呃什么呢?呃,第一个我要测试的就是我们的这个获取所有权限,对吧?我们来看一下它可不可以获取所有权限。呃,并且每一个权限的子权限以及他的level都已经被填上了,我们看一下他能不能做到这一点,对吧?哎,那你可以看到。获取的第一个权限ID是1PARENT ID是零对吧?Permission name呢是全部权限permission code的是那对吧?呃,是一个,那然后呢。他的层级呢是一对吧,它的权限数里面层级是一,它的呃子权限的这个children准对吧?呃就是说子权限的呃字段呢,也被填上了,比方说是ID为二的呀,ID为三的等等等等,你可以看到ID为二的呢,呃也被填上了,对吧?所以说这个的话呢,你会发现我们这个获取所有权限的这个方法呢,编写的是没有问题的对吧?编写的是没有问题的,呃,那么。
15:19
呃,我们再来测试一下根据用户ID获取对应权限的这样的一个代码,对吧?那就是get permission by user的ID,比方说我们user的ID是吧?我们看它能不能正确的获取,对吧?OK,那你可以看到它获取的是空,说明我们这个第二个用户呢,已经被我们删除了,我们来看一下,哎,主建ID为三,或者说用户ID为三的,呃,权限它是什么对吧?哎,那你可以看到。用户ID为三的,那么他的权限是它可以访问统计模块以及统计模块下面的实时统计模块,统计模块下面的对吧,流量统计模块,还有统计模块下面的呃,以及报表模块对吧?它都是可以,呃就是说都是可以访问的对吧?都是可以访问的,你可以看到它可以正确的获取第三个用户的对吧,或者说主user ID等于三的权限列表,然后呢,前端呢,就可以根据这个权限列表呢,呃,来把它可以访问的菜单呢,呃给它拿出来对吧?给它拿出来好,那我们现在的话呢,我们权限服务的代码呢,就都写完了。
我来说两句