Django DRF ограничивает создание модели профиля авторизованным пользователем - PullRequest
0 голосов
/ 06 марта 2019

У меня есть модель много пользователей и модель клиента с отношением OneToOne к пользователю. Я установил аутентификацию для модели User, где пользователь может редактировать / обновлять / удалять только свой профиль. Но я хочу, чтобы модель клиента также была доступна (список / создание / обновление и т. Д.) Аутентифицированному пользователю.

Мой класс разрешений для Клиента:

class UpdateCustomerProfile(permissions.BasePermission):
    """Allow customers to edit their own profile """

    def has_permission(self, request, view):
        """Check if user is authenticated and has permisson to access customer model """

        if view.action == 'list':
            return request.user.is_authenticated and request.user.is_superuser
        elif view.action == 'create':
            return request.user.is_authenticated
        elif view.action in ['retrieve', 'update', 'partial_update', 'destroy']:
            return request.user.is_authenticated
        else:
            return False

Мой набор клиентов:

class CustomerViewSet(viewsets.ModelViewSet):
    """Handle creating reading and updating Users in  system"""

    serializer_class = serializers.CustomerSerializer
    queryset = models.Customer.objects.filter()
    permission_classes = (permissions.UpdateCustomerProfile,)

Но я получаю сообщение об ошибке:

«detail»: «Учетные данные для аутентификации не предоставлены».

даже если я добавлю токен в поле Авторизация заголовка.

UPDATE:

Если я добавлю authentication_classes = (TokenAuthentication,) в мой CustomerViewSet, я получу ошибку:

"detail": "You do not have permission to perform this action."

Я в замешательстве, я хочу использовать текущую авторизацию пользователя для авторизации создания клиента. только авторизованный пользователь может создать свой профиль клиента

Как я могу это исправить?

1 Ответ

1 голос
/ 06 марта 2019

Вы должны добавить атрибут authentication_classes в представление

from rest_framework.authentication import TokenAuthentication


class CustomerViewSet(viewsets.ModelViewSet):
    """Handle creating reading and updating Users in  system"""

    serializer_class = serializers.CustomerSerializer
    queryset = models.Customer.objects.filter()
    permission_classes = (permissions.UpdateCustomerProfile,)
    <b>authentication_classes = (TokenAuthentication,)</b>
...