Как правильно обрабатывать запросы на основе разрешений пользователя 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