首页 > 解决方案 > Django 用户权限/视图?

问题描述

我正在使用基于 Django 类的视图。

视图.py

class ReportListView(LoginRequiredMixin, ListView):
    model = Report

    def get_queryset(self):
        queryset = Report.objects.filter(user=self.request.user)
        return queryset


class ReportDetailView(LoginRequiredMixin, DetailView):
    model = Report


class ReportUpdateView(LoginRequiredMixin, UpdateView):
    model = Report


class ReportCreateView(LoginRequiredMixin, CreateView):
    model = Report


class ReportDeleteView(DeleteView):
    model = Report

如您所见,这些是最通用的视图,但它们都应该只代表当前用户的数据。

目前任何用户都可以查看/查看其他用户数据。

我看到的一种方式是人们会定义他们的 get_queryset 方法,就像上面一样。这种方法只过滤渲染的数据,但用户仍然可以通过 url 访问禁止的数据(前提是他知道/猜测了 id)。

如何限制对其他用户资源的访问?

标签: pythondjangoviews

解决方案


I've figured it out. I created a Mixin where the queryset is evaluated against the user.

class BaseMixin(object):    
    def get_queryset(self):
        return DnevnaBiljeska.objects.filter(igrac=self.request.user.igrac)

class ReportListView(LoginRequiredMixin, BaseMixin, ListView):
    model = Report

This way i can call super on further queryset filtering for each view individually.


推荐阅读