¿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?
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:
Dentro de “permissions.py”, importe los siguientes módulos:
Nota: Reemplace “.models” con la ruta correcta a su modelo de Autor.
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.
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.