Пользовательское разрешение DRF не работает для функции просмотра (запрос на получение) - PullRequest
0 голосов
/ 12 марта 2020

У меня Angular интерфейс отправки запроса с использованием firebase id_token. В backend (backend.py) аутентифицирует каждый запрос на основе id_token в заголовке. Используя Firebase Admin SDK, я добавил пользователей в «стандартную» или «премиум» группу, а также имел локальную копию пользователей в базе данных. В permissions.py я проверяю, принадлежит ли пользователь к стандарту или премиум.

Для QuestionCorrAPiView (APIView) он работает должным образом (если пользователь не вошел в систему или пользователь не входит в стандартную группу, не может получить доступ). Однако, для представления функции, я не мог понять, почему класс полномочий не вызывается. Несмотря на то, что _has_persmission возвращает значение False, оно по-прежнему разрешает доступ к просмотру экзаменов. Я знаю, что где-то допустил глупую ошибку, но не знаю где. Любая помощь приветствуется.

'' '# Все другие операции импорта из coc_api.permission import IsStandard

@ /api_vie(['GET'])
@/permission_classes([IsStandard])
def exams(request):
    exams = models.Exam.objects.all()
    serializer = coc_serializers.ExamSerializer(exams)
    return Response(serializer.data)

class QuestionCorrAPIView(APIView):
     permission_classes = [IsAuthenticated,IsStandard] 

       # IMPLEMENTATION HERE

# permissions.py

def _is_in_group(user, group_name):
 """
    Takes a user and a group name, and returns `True` if the user is in that group.
    """
try: 
    return Group.objects.get(name=group_name).user_set.filter(id=user.id).exists()
except Group.DoesNotExist:
   return None

def _has_group_permission(user, required_groups):    
    return any([_is_in_group(user, group_name) for group_name in required_groups])

class IsStandard(permissions.BasePermission):
# group_name for stadnard users
    required_groups = ['standard']

    def has_permission(self, request, view):
        has_group_permission = _has_group_permission(
            request.user, self.required_groups)
       if self.required_groups is None:
          return True
    return has_group_permission

' '' *

...