Django Пользовательские разрешения / просмотры? - PullRequest
0 голосов
/ 28 апреля 2018

Я использую представления на основе классов 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 (при условии, что он знает / угадывает идентификатор).

Как я могу ограничить доступ к ресурсам других пользователей?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Перед доступом к любому представлению убедитесь, что текущий пользователь является владельцем просматриваемого экземпляра

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
0 голосов
/ 28 апреля 2018

Я понял это. Я создал 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 для дальнейшей фильтрации наборов запросов для каждого представления отдельно.

...