Как настроить права доступа в django (не в DRF)?
Как настроить разрешения на обновление и удаление объектов только для создателя (автора) в view.py (CRUD классы)? Я знаю классы LoginRequiredMixin и PermissionRequiredMixin, но я не могу настроить их, чтобы сделать разрешение только для создателя (автора) на изменение конкретного объекта. Я знаю, как настроить разрешение в DRF, используя класс IsAdminOrReadOnly, например: permissions.py in DRF
class IsOwnerOrReadOnly(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return bool(obj.user == request.user or request.user.is_staff)
view.py в Django (без DRF)
class NewsUpdateView(LoginRequiredMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
model.py в Django (без DRF)
class News(models.Model):
title = models.CharField(max_length=128)
content = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
photo = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
is_published = models.BooleanField(default=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
Вопрос в том, как настроить права доступа в django (не в DRF)? Заранее спасибо. Надеюсь, вы сможете дать мне совет, ссылку на статью, или документацию, или пример кода для решения этой проблемы. Я прочитал Custom users and permissions, но не понял, как решить именно мою задачу.
Вы можете использовать UserPassesTestMixin в своем представлении.
from django.contrib.auth.mixins import UserPassesTestMixin
class NewsUpdateView(LoginRequiredMixin, UserPassesTestMixin, BaseMixin, UpdateView):
form_class = NewsForm
model = News
template_name = 'news/news_update.html'
def test_func(self):
news = self.get_object()
return news.user == self.request.user