У меня 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
' '' *