java 单机接口限流处理方案
290
2022-06-22
用户权限验证源码剖析,和用户登录验证有点相似,但是为了增加记忆,有必要再一次添加,
注意:一定要跟着博主的解说再看代码的中文注释及其下面的一行代码!!!
1、准备一个路由和视图类,全局路由配置暂时忽略,当流程执行到下面的url:groupsSelectAll——> GroupsView的视图类下的as_view()方法
2、但是GroupsView类下没有as_view方法,这时就要去它的父类APIView查看(点进去看as_view方法),这里博主只复制方法源代码,大家只需要看中文注释及其下的代码语句。在这个方法中值得一提的是super关键字,如果请求视图类(就是GroupsView类,如果继承了多个父类)还有另一个父类,它先会查看这个父类是否有as_view方法。在这里它是会执行APIView的父类View中的as_view方法,然后我们再次查看父类View的as_view方法。第一个as_view方法是APIView类的,第二个as_view方法是View类的。
3、我们在第二个as_view方法中可以知道self是我们的请求视图类的对象,通过这个self调用dispatch方法,请求视图类中没有dispatch方法,是不是又去APIView类中执行dispatch方法。
4、其他代码不用看,我们直接看initial方法,因为这个initial方法有权限验证的功能。
5、这就到了我们的用户权限验证的戏码了。博主添加APIView部分代码,即check_permission方法用到的代码。我们可以查看代码中的self.check_permissions(request),点进去查看check_permissions()方法,可以看到有get_permissions方法,这个方法有self.permission_classes变量,即self.permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES,然后这里也和【上一篇的用户登录验证】很相似,就是请求视图类中如果没有这个变量名及值(值是一个列表),就会使用全局配置文件中的REST_FRAMEWORK={"DEFAULT_PERMISSION_CLASSES":["权限验证类的全路径"]},或者我们在请求视图类中添加这个变量及值
6、在上面的APIView类中会执行到if not permission.has_permission(request, self),我们可以直接点进去查看has_permission方法。一般我们自定义这个用户权限验证类的话我们一般需要继承BasePermission类,这样我们直接重写has_permission方法,里面的需求就是验证时候当前登录的用户是否具有某个模块的权限。像这样我们可以自定义一个只有充值称为VIP或者SVIP用户访问权限的类(这只是我的设想)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~