es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo desactivar el acceso a las API de Django basado en el campo booleano de is_active?

Tengo un modelo de autor con un campo:
is_active = models.BooleanField(default=False)
Deseo restringir el acceso al autor cuyo is_active=False.

Puedo utilizar algo como esto en cada API:
get_object_or_404(uuid=id, is_active=True)
Pero deseo restringir globalmente el acceso a UUID cuyo is_active=false, en lugar de escribir esta instrucción en cada API.

¿Existe una manera de hacerlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede crear una clase de permiso personalizada en Django REST Framework que verifique si el campo “is_active” del autor es Verdadero o Falso.

    Aquí hay un ejemplo de cómo hacerlo:

    1. Cree un archivo nuevo en su proyecto llamado “permissions.py” (o cualquier nombre que prefiera).
    2. Dentro de “permissions.py”, importe los siguientes módulos:

    from rest_framework.permissions import BasePermission
    from .models import Author
    

    Nota: Reemplace “.models” con la ruta correcta a su modelo de Autor.

    1. Cree una nueva clase llamada “IsActiveAuthorPermission” que herede de “BasePermission”.
    class IsActiveAuthorPermission(BasePermission):
        def has_object_permission(self, request, view, obj):
            if isinstance(obj, Author):
                return obj.is_active
            return True
    

    Nota: En el código anterior, “has_object_permission” es un método que verifica si el campo “is_active” del autor es Verdadero o Falso. Si es Verdadero, el método devuelve Verdadero, lo que otorga permiso. Si es Falso, el método devuelve Falso, lo que deniega el permiso.

    1. En su vista de Django REST Framework, importe la clase “IsActiveAuthorPermission” y agréguela al atributo “permission_classes”.
    from .permissions import IsActiveAuthorPermission
    
    class AuthorDetailView(generics.RetrieveUpdateDestroyAPIView):
        queryset = Author.objects.all()
        serializer_class = AuthorSerializer
        permission_classes = [IsActiveAuthorPermission]
    

    Ahora, cada vez que un usuario intenta acceder al UUID de un autor, la clase “IsActiveAuthorPermission” verifica si el campo “is_active” del autor es Verdadero o Falso. Si es Falso, se niega el permiso y el usuario recibe un error 403 Prohibido. Si es Verdadero o el usuario no está intentando acceder a un objeto de autor, se otorga el permiso y el usuario puede acceder al objeto.

Comments are closed.