У меня есть API, который позволяет пользователям публиковать некоторые данные, и мне нужно ограничить представления ТОЛЬКО для автора публикации, который визуализирует публикуемые данные.
API работает с Token Authentication и настроен на то, чтобы анонимный пользователь не видел или обновить эти сообщения ... Но я не могу заблокировать зарегистрированных пользователей от просмотра всех сообщений.
Вот соответствующий код на views.py :
class UserData(viewsets.ModelViewSet):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated, permissions.UpdateOwnData)
def perform_create(self, serializer):
"""Sets the user profile to the logged in user"""
serializer.save(user_profile=self.request.user)
def list(self, request):
queryset = models.UserDataFeed.objects.all()
serializer = serializers.UserDataSerializer(queryset, many=True)
return Response(serializer.data)
И это внутри permissions.py :
class UpdateOwnData(permissions.BasePermission):
"""Allow user to edit their own profile"""
def has_object_permission(self, request, view, obj):
"""Check user is trying to edit their own profile"""
if request.method in permissions.SAFE_METHODS:
return True
else:
if request.user.is_superuser:
return True
else:
return obj.user_profile.id == request.user.id
Кажется, что permissions.UpdateOwnData в missions_classes не влияет на поведение.
Если я использую missions_classes = (IsAuthenticated,) , он работает просто отлично, позволяя только аутентифицированным пользователям просматривать данные.