zoukankan      html  css  js  c++  java
  • 前后端分离djangorestframework——权限组件

    权限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定义好的权限类,需要用什么就继承什么,且根据继承的类不同,必须要定义该基类里明确规定需要的方法或者属性
    • 权限验证按开发的逻辑必须要在认证组件验证之后才验证
    • 其实这些都跟认证组件差不太多,注意一下就行了,不用多说
  • 相关阅读:
    Pandas也能轻松绘图,简单而又漂亮
    笔试题: 二叉排序数左移k个
    补题next_permutation
    从HTTP到HTTPS
    HTTP首部字段详解
    HTTP请求方法及响应状态码详解
    HTTP报文格式详解
    TCP/IP网络基础
    Netty学习笔记
    ZooKeeper学习笔记
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/10426702.html
Copyright © 2011-2022 走看看