Django контроль доступа пользователей - PullRequest
0 голосов
/ 12 февраля 2020

Например, у меня есть одна модель Post.

class Post(models.Model):
    task = models.ForeignKey("User")

Я хочу, чтобы пользователи могли иметь доступ только к тем сообщениям, которые были созданы ими самими, но у них слишком много представлений, в которых перечисляются некоторые сообщения, чтобы переписать набор запросов в каждом представлении.

Так есть ли какой-нибудь изящный способ управления доступом пользователей? Сохраните и получите текущего пользователя в потоке и внедрите новый класс Manager в Post, но я не знаю, почему это не рекомендуется.

1 Ответ

1 голос
/ 12 февраля 2020

Предполагается, что вы используете generi c ListView (Django -do c) . Вы можете переопределить метод get_queryset(...) (Django -до c) , как показано ниже,

class PostListView(ListView):
    <b>def get_queryset(self):
        return Post.objects.filter(task=self.request.user)</b>

Generi c Solution

Сначала вам нужно создать класс mixin,

class GenericLoggedInMixin:
    user_field_name = None

    def get_queryset(self):
        queryset = super().get_queryset()
        if self.user_field_name:
            return queryset.filter(**{self.user_field_name: self.request.user})
        return queryset

и наследовать то же самое в вашем представлении, что и

class PostListView(<b>GenericLoggedInMixin,</b> ListView):
    <b>user_field_name = 'task'</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...