限制对未经身份验证的用户的特定页面的访问

时间:2017-10-05 13:55:23

标签: django

我正在Django建立一个简单的论坛,我有两个模型 - Topic和Subtopic。我需要限制对未经身份验证的用户访问某些主题和子主题,以便他们无法访问它们,而其他主题和子主题应该仍然可供所有用户访问 - 包括身份验证和匿名。例如,我的主题体育主题为足球,主题管理主题为 HR 。虽然第一个用户应该可以访问,但第二个用户只能访问经过身份验证的用户。我如何实现这一目标? 这是我的仪表板(列出了所有主题)和子主题视图:

def dashboard(request):
    topics = Topic.objects.all()
    return render(request, 'djangoforum/dashboard.html', {'topics': topics})

def subtopic_view(request, slug):
    current_user = request.user
    form = ThreadForm(request.POST, request.FILES)
    subtopic = get_object_or_404(SubTopic, slug=slug)
    threads = Thread.objects.filter(subtopic=subtopic, ancestor_id=None).order_by('-created_date')
    if request.method == 'POST':
        if form.is_valid():
            thread = form.save(commit=False)
            thread.subtopic = subtopic
            thread.save()
            return redirect(request.path)
    return render(request, 'djangoforum/subtopic.html', {
        'current_user': current_user,
        'form': form,
        'subtopic': subtopic,
        'threads': threads
    })

2 个答案:

答案 0 :(得分:0)

根据您的要求,您需要设置对象级权限,为此您可以使用django-guardiandjango-rules

答案 1 :(得分:0)

在视图中使用@login_required装饰器限制通过烦人的用户访问该视图

@login_required
def dashboard(request):
    topics = Topic.objects.all()
    return render(request, 'djangoforum/dashboard.html', {'topics': topics})

https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.decorators.login_required