Как правильно обрабатывать запросы на основе разрешений пользователя Django

Используя Django, у меня есть представление на основе класса, чтобы получить список items из моей базы данных. Дело в том, что этот список не должен быть доступен каждому пользователю. Пользователь, не имеющий привилегий администратора или is_staff, должен иметь возможность видеть все элементы, в то время как обычный аккаунт без этих привилегий будет иметь доступ только к своим items.

Мне интересно, как я должен это реализовать.

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

или

Имею одно представление на основе класса, где я проверяю, является ли пользователь администратором и не администратором, и это одно представление на основе класса обрабатывает запрос по-разному в зависимости от двух различных сценариев.

Я не уверен, что такое "путь Django", но я бы, естественно, выбрал второй подход, но решил спросить на всякий случай.

Если "путь Django" является наиболее простым, читаемым и легким, я думаю, что это переписать get_queryset method в одном представлении, основанном на классах:


class MyView(generic.ListView):
    template_name = 'my-template.html'
    paginate_by = 25

    def get_queryset(self):
        queryset = MyModel.objects
        # I dont remember if a superser is already staff
        # In this case this can be replaced by: if self.request.user.is_staff: only
        if self.request.user.is_staff or self.request.user.is_superuser:
            queryset = queryset.filter(...filters...)
        else:
            queryset = queryset.filter(...other filters...)

        return queryset


Вернуться на верх