首页 > 其他 > 详细

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

时间:2020-11-12 10:50:44      阅读:34      评论:0      收藏:0      [点我收藏+]
1.重写django权限
 
1.1 syl/utils/authentication.py 重写权限模块
# -*- 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(没卖课程播放个毛线!头给你打扁!)                                                

 

2.添加视频播放接口权限
 
2.1 course/urls.py 中添加路由
 
router.register(rsections, 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,)

 

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

原文:https://www.cnblogs.com/SHHD/p/13962093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!