Django用户权限/视图?

时间:2018-04-27 21:54:52

标签: python django views

我使用基于Django类的视图。

views.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)。

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

2 个答案:

答案 0 :(得分:0)

我已经弄清楚了。我创建了一个Mixin,其中查询集是针对用户进行评估的。

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

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

这样我就可以单独调用super对每个视图的进一步查询集过滤。

答案 1 :(得分:0)

在访问任何视图之前,请确保当前用户是所查看实例的所有者

class ReportDetailView(LoginRequiredMixin, DetailView):
    model = Report

    def get_object(self,queryset=None):
        obj = super(Report, self).get_object(queryset=queryset)
        if obj.user != self.request.user:
            raise Http404
        return obj