如何在 django 中自定义权限(不是在 DRF 中)?

问题描述 投票:0回答:1

如何在view.py(CRUD类)中为创建者(作者)自定义更新和删除对象的权限?我知道类 LoginRequiredMixin 和 PermissionRequiredMixin,但我无法自定义它们以仅允许创建者(作者)更改确切的对象。 我知道如何使用 IsAdminOrReadOnly 类在 DRF 中自定义权限,例如: DRF 中的权限.py

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)

Django 中的 view.py(没有 DRF)

class NewsUpdateView(LoginRequiredMixin, BaseMixin, UpdateView):
    form_class = NewsForm
    model = News
    template_name = 'news/news_update.html'

Django 中的 model.py(无 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 中)自定义权限? 先感谢您。我希望您能给我一些建议、文章链接、文档或代码示例来解决这个问题。我已阅读自定义用户和权限,但我不知道如何解决我的确切任务。

django permissions
1个回答
1
投票

您可以在您的视图中使用

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
© www.soinside.com 2019 - 2024. All rights reserved.