COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

En este tutorial voy a explicar la implementación de un Mixin para dar acceso a una vista solo al usuario que creó el objeto a modificar en esa vista.

mixins.py

from django.core.exceptions import PermissionDenied

class UserPermissionsMixin(object):
    """Mixin para verificar si un usuario puede acceder a una vista."""
    def dispatch(self, request, *args, **kwargs):
        model_obj = self.get_object()
        if not (model_obj.author.id == self.request.user.id or self.request.user.is_staff):
            raise PermissionDenied("No tiene acceso.")
        return super(UserPermissionsMixin, self).dispatch(request, *args, **kwargs)

Implementacion del mixin en las views.
views.py

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import UpdateView, DeleteView
from .models import MyModel
from .mixins import UserPermissionsMixin
from .forms import MyForm

class MyUpdateView(LoginRequiredMixin, UserPermissionsMixin, UpdateView):
    login_url = '/login'
    model = MyModel
    form_class = MyForm
    success_url = '/'

class MyDeleteView(LoginRequiredMixin, UserPermissionsMixin, DeleteView):
    login_url = '/login'
    model = MyModel
    success_url = '/'

Lo ultimo que se necesita es un que el modelo tenga un campo author tal que:
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
recuerda importar from django.conf import settings

COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE

0 Comentarios

para escribir tu comentario

Artículos relacionados