• 2.课程播放接口权限限制


    1.重写django权限

    1.1 syl/utils/authentication.py 重写权限模块

    # -*- coding: utf-8 -*-
    # -*- coding: utf-8 -*-
    from rest_framework.permissions import BasePermission
    from rest_framework import exceptions
    import re
    from course.models import UserCourse
    
    # 自定义权限(局部)
    class MyPermission(BasePermission):
        # has_permission 是用户对这个视图有没有 GET POST PUT PATCH DELETE 权限的分别判断
        def has_permission(self, request, view):
            print('has_perm')
            # print(view.kwargs.get("pk"), request.user.id)
            """判断用户对模型有没有访问权"""
            # 任何用户对使用此权限类的视图都有访问权限
            if request.user.is_superuser:
                # 管理员对用户模型有访问权
                return True
            elif view.kwargs.get('pk') == str(request.user.id):
                # 携带的id和用户的id相同时有访问权
                return True
            return False
        
        
            # has_object_permission 是用户过了 has_permission 判断有权限以后,再判断这个用户有没有对一个具体的对象有没有操作权限
            # 这样设置以后,即使是django admin管理员也只能查询自己user标的信息,不能查询其他用户的单条信息
        def has_object_permission(self, request, view, obj):
            # 判断当前用户是否有访问 /course/sections/1/ 接口权限
            course_detail_url = re.match('/course/sections/(d+)/$',
            request.path_info)
            if course_detail_url:
                user = request.user
                course = obj.chapters.course
                has_video_rights = self.video_rights(user,course)
                return has_video_rights
            return True
            # 对用户是否有课程播放权限进行验证
        @staticmethod
        def video_rights(user,course):
            '''
            :param user: 当前登录用户
            :param course: 用户要播放的课程对象
            :return: 返回True有权限,否则出发异常
            '''
            # 1.免费课程直接返回True
            # 2.会员免费课程,判断当前用户是否是会员,如果是会员返回True
            # 3.付费课程,判断当前用户在UserCourse表中有购买记录返回True
            try:
                is_buy = UserCourse.objects.get(course=course, user=user)
                return True
            except Exception as e:
                raise exceptions.ParseError('没卖课程播放个毛线!头给你打扁!')
    
                
                
                
    View Code

    2.添加视频播放接口权限

    2.1 course/urls.py 中添加路由

    router.register(r'sections', views.SectionsViewSet)

    2.2 course/views.py中使用自定义权限

    from utils.authentication import MyPermission
    class SectionsViewSet(viewsets.ModelViewSet):
        queryset = Sections.objects.all()
        serializer_class = SectionsSerializer
        permission_classes = (MyPermission,)
  • 相关阅读:
    快速幂取模算法详解
    牛客网小白月赛5I区间(差分数组)
    多重背包模板
    hdu5791(DP)
    CodeForces
    最长上升子序列LIS(51nod1134)
    POJ1088(记忆搜索加dp)
    最长公共子序列LCS(POJ1458)
    Gym 100971J-Robots at Warehouse
    模板
  • 原文地址:https://www.cnblogs.com/gaodenghan/p/13953982.html
Copyright © 2020-2023  润新知