前后端分离djangorestframework——权限组件

mac2022-06-30  88

权限permissions

权限验证必须要在认证之后验证

 

权限组件也不用多说,读了源码你就很清楚了,跟认证组件很类似

 

具体的源码就不展示,自己去读吧,都在这里:

 

 

 

局部权限

 

设置model表,其中的type就是用户类型

 

数据库:

 

在根目录创建utils,utils创建permission文件,在其中定义权限类,自定义的权限类必须继承BasePermission类,且必须定义has_permission方法,其中message是权限验证没通过时显示的字段

 

url:

 

view:

 

 开始访问,刚才说了权限是在用户登录认证之后做的处理,所以也必须带上token访问:

好现在是无权访问,修改用户的type为1看看:

 

重启项目再次访问:

 

 

 

如果不带token访问:

 

所以其实在定义的权限类那里可以先作判断是否用户已通过认证,这个可以自行研究

主要代码:

view:

from rest_framework.views import APIView from rest_framework.views import Response from utils.auth import MyAuth from utils.permisson import MyPermission from DRF.models import User import uuid class DemoView(APIView): def get(self, request): return Response('简单认证') class LoginView(APIView): def get(self, request): return Response('请登录,如果没有账号请创建') def post(self, request): user = request.data.get('user') pwd = request.data.get('pwd') token = uuid.uuid4() User.objects.create(user=user, pwd=pwd, token=token) return Response('创建用户成功') class TestView(APIView): authentication_classes = [MyAuth, ] permission_classes = [MyPermission, ] def get(self, request): return Response('权限等级测试,VIP用户您好,欢迎访问XX。。。') View

permission:

from rest_framework.permissions import BasePermission class MyPermission(BasePermission): message = '无权访问,您的用户等级太低,充值888元立得永久VIP特权 ' def has_permission(self, request, view): user_obj = request.user if user_obj.type == 3: return False else: return True

 

 

 

全局权限

 

 根据前面的认证组件,按同样的套路,全局自然就直接在配置问题里添加就完事儿了,我空出来的地方就是需要添加的权限,自然也是一个列表,跟认证组件一样的写法

 

当然权限也有自带的,都在rest_framework.permissions自行研究:

 

总结 

自定义权限必须继承DRF定义好的权限类,需要用什么就继承什么,且根据继承的类不同,必须要定义该基类里明确规定需要的方法或者属性权限验证按开发的逻辑必须要在认证组件验证之后才验证其实这些都跟认证组件差不太多,注意一下就行了,不用多说

 

转载于:https://www.cnblogs.com/Eeyhan/p/10426702.html

相关资源:Django Rest framework权限的详细用法
最新回复(0)