DjangoRF: как ограничить некоторые посты только для авторов постов? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть 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,) , он работает просто отлично, позволяя только аутентифицированным пользователям просматривать данные.

1 Ответ

0 голосов
/ 22 февраля 2020

проблема заключается в применении разрешений, которые вы добавляете после получения результатов, попробуйте это serializer.save (user_profile = self.request.user) код здесь

...