Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

667
Views
Django rest framework: Impedir que un usuario elimine/Edite/Vea a otros usuarios en ModelViewSet

Estaba usando el modelo de usuarios de Django para mi marco de descanso de Django. Para esto usé ModelViewSet de Django para mi clase de usuario.

 class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer

Serializadores.py

 class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'password'] extra_kwargs = { 'password' : { 'write_only':True, 'required': True } } def create(self, validated_data): user = User.objects.create_user(**validated_data) Token.objects.create(user=user) # create token for the user return user

Pero actualmente del cartero cuando realizo la solicitud usando el token de un usuario para ver, eliminar, editar otros usuarios

 http://127.0.0.1:8000/api/users/4/

Es capaz de editar/eliminar/ver otros usuarios. No quiero que eso suceda y un usuario puede hacer una solicitud por sí mismo solo es todo lo que quiero.

Esta es mi aplicación urls.py

urls.py

 from django.urls import path, include from .views import ArticleViewSet, UserViewSet from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('articles', ArticleViewSet, basename='articles') router.register('users', UserViewSet, basename = 'users') urlpatterns = [ path('api/', include(router.urls)), ]

¿Cómo puedo evitar que un usuario acceda a otros usuarios cuando realizan una solicitud GET/POST/PUT/DELETE?

EDITAR 1: después de agregar la clase IsOwnerOfObject como se proporciona en las respuestas a continuación, ahora, cuando solicito los detalles del usuario, obtengo

No se proporcionaron las credenciales de autenticación.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Cree un archivo llamado permissions.py .

 from rest_framework import permissions class IsOwnerOfObject(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj == request.user

luego agregue la clase de permiso a su ModelViewSet:

 from yourapp.permissions import IsOwnerOfObject class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer permission_classes = [IsOwnerOfObject, <other permission classes you want to use>]

Más información aquí: https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#object-level-permissions

over 4 years ago · Santiago Trujillo Report

0

Si desea deshabilitar la eliminación por completo (lo que probablemente sea correcto, ya que si desea "eliminar" un usuario, debe desactivarlo en su lugar). Entonces puede reemplazar su vista con esto:

 from rest_framework import viewsets from rest_framework import generics class UserViewSet( generics.CreateModelMixin, generics.ListModelMixin, generics.RetrieveModelMixin, generics.UpdateModelMixin, generics.viewsets.GenericViewSet ): queryset = User.objects.all() serializer_class = UserSerializer

Y luego puede usar la respuesta de Ene Paul para limitar quién puede editar.

over 4 years ago · Santiago Trujillo Report

0

A partir de la respuesta de Ene, se deben proporcionar las clases de autenticación y permiso.

Cree un archivo llamado permisos.py.

 from rest_framework import permissions class IsOwnerOfObject(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj == request.user

luego agregue la clase de permiso y autenticación a ModelViewSet:

 from api.permissions import IsOwnerOfObject from rest_framework.authentication import TokenAuthentication from rest_framework.permissions import IsAuthenticated class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer permission_classes = [IsAuthenticated, IsOwnerOfObject] authentication_classes = (TokenAuthentication,)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!