Django generi c view, проверьте, находится ли запрос в той же группе, что и создатель - PullRequest
1 голос
/ 29 февраля 2020

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

Причина этого заключается в том, что не каждый сотрудник может редактировать все вклады. Только если сотрудник входит в ту же группу, что и автор, он может редактировать статью.

Мое представление:

class EditArticleView(LoginRequiredMixin, UpdateView):
    model = Article
    message = _("Your Article has been updated.")
    form_class = ArticleForm
    template_name = 'articles/article_update.html'


def form_valid(self, form):
    form.instance.user = self.request.user

    return super().form_valid(form)

def get_success_url(self):
    messages.success(self.request, self.message)
    return reverse('articles:list')

'''
def get_queryset(self):
    queryset = super(EditArticleView, self).get_queryset()
    queryset = queryset.filter(user=self.request.user)
    print(self.request.user)
    return queryset
'''

1 Ответ

2 голосов
/ 29 февраля 2020

В качестве альтернативы вы можете также рассмотреть возможность использования микширования UserPassesTest, как описано в документах :

from django.contrib.auth.mixins import UserPassesTestMixin

class EditArticleView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):

    def test_func(self):
        article = self.model.objects.get(pk=self.kwargs['pk'])
        return Group.objects.filter(user=self.request.user).filter(user=article.author).exists() # Or any other test you need

    # ... Your other view code
...