zoukankan      html  css  js  c++  java
  • rest-framework之权限组件

    1、权限简介

    比如只用超级用户才能访问指定的数据,普通用户不能访问,所以就要有权限组件对其限制;

    2、权限组件的使用

    权限使用也分为局部使用、全局使用、局部禁用,使用方式和认证组件类似;

    权限组件局部使用:

    models.py

    from django.db import models
    
    # Create your models here.
    class User(models.Model):
        name = models.CharField(max_length=32)
        pwd = models.CharField(max_length=64)
        # 加上用户类型字段
        user_type = models.IntegerField(choices=((1, "超级管理员"), (2, "普通管理员"), (3, "2b用户")), default=3)
    
    # 和User表做一对一关联
    class Token(models.Model):
        # OneToOneField源码本质就是Foreignkey+unique约束
        user = models.OneToOneField(to='User')
        token = models.CharField(max_length=64)

    执行数据库迁移命令,并添加数据:

    image_thumb1

    在app下创建一个MyAuths.py文件,写一个权限类,并继承BasePermission

    from app01 import models
    from rest_framework.exceptions import AuthenticationFailed
    from rest_framework.authentication import BaseAuthentication
    from rest_framework.permissions import BasePermission
    
    
    # Create your views here.
    # 认证类,内容和上一节认证中的一样
    class MyAuth(BaseAuthentication):
        ...
    
    # 权限类
    class MyPermision(BasePermission):
        # message是抛出的错误信息
        message = '不是超级用户,查看不了'
        def has_permission(self, request, view):
        #因为权限是在认证之后执行的,所以能取到reugest.user
        if request.user.user_type == 1:
                return True
            else:
                return False

    views.py

    from app01.MyAuths import MyAuth, MyPermision
    
    # Create your views here.
    
    # 只有超级管理员才能访问该接口
    class Books(APIView):
        # 使用上面定义的认证类MyAuth,可以写多个认证类
        # authentication_classes = [MyAuth,]
        permission_classes = [MyPermision,]   #使用权限类
        def get(self, request):
            # request.user就是当前登录用户,可以拿到用户名,然后再做各种操作
            print(request.user.name)
            return Response('返回了所有图书')

    在postman中测试:

    image_thumb3

    权限组件全局使用:

    settings.py

    REST_FRAMEWORK={
        "DEFAULT_AUTHENTICATION_CLASSES":["app01.MyAuths.MyAuth",],
        # 权限组件全局使用
        "DEFAULT_PERMISSION_CLASSES":["app01.MyAuths.MyPermision",]
    }

    权限类使用顺序:

    先找视图类中的权限类,再找settings里配置的权限类,最后找默认的权限类

  • 相关阅读:
    ubuntu分屏终端
    Xcode-5.1.1更改文件盯作者
    Swift——(两)Swift访问元组
    Android Loader使用,屏幕解锁,重复荷载
    医疗信息季节:第二十三届中国国际医疗仪器设备展览会暨研讨会 思考
    UIBarButtonItem 小记边
    L轻松学习inux教程5 知识与学习bash
    Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
    Android Context 上下文 你必须知道的一切
    Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12515496.html
Copyright © 2011-2022 走看看