簡體   English   中英

如何在基於 Django class 的視圖中限制用戶組的訪問?

[英]How to restrict access by user groups in Django class based view?

看法

問題:我想在基於 django class 的視圖中使用權限限制。 如果登錄用戶屬於學生組,那么我想重定向到student-dash url。 如果來自教師的用戶,則重定向到teacher-dash url。 如果學生用戶嘗試訪問教師儀表板,那么我想限制該學生用戶訪問教師儀表板並呈現 404 錯誤? 如果有任何幫助,我將不勝感激。

   class STListView(ListView):
    queryset = Article.objects.exclude(story_status='sn')
    template_name = 'index_page.html'
    context_object_name = 'list'

    def get_context_data(self, **kwargs):
        context = super(STListView, self).get_context_data(**kwargs)
        group = self.request.user.groups.filter(user=self.request.user)[0]
        if group.name == "student":
            return HttpResponseRedirect(reverse('student-dash'))
        elif group.name == "teacher":
            return HttpResponseRedirect(reverse('teacher-dash'))
        elif group.name == "Manger":
            return HttpResponseRedirect(reverse('manger-dash'))
        return context

有一些方法可以存檔它,

嘗試查看permission_required 裝飾器

from django.contrib.auth.decorators import permission_required

@permission_required('user', login_url='/redireect_to_student/')
def student_view(request):
    ...

如果發出請求的用戶不符合權限,將被重定向到login_url (它可以是您應用程序的任何 URL)

另一種方法可能是使用user_passes_test 裝飾器

如果 function 被傳遞,用戶可以see視圖,否則將被重定向到您的應用程序的特定 URL:

from django.contrib.auth.decorators import user_passes_test

def email_check(user):
    return user.groups == 'student'

@user_passes_test(email_check)
def my_view(request):
    ...

是有關權限的 Django 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM