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
Curso de Django 2017
0 Comentarios
para escribir tu comentario