【发布时间】:2015-01-24 12:07:47
【问题描述】:
我注意到当我以管理员身份登录时,访问非管理员区域时不需要重新验证。
但是,当我以简单用户身份登录并访问管理区域时,Django 当然会检查我是否是管理员。
这个检查发生在哪里?我想限制版主访问网站的非管理部分,所以需要检查一下。 谢谢。
【问题讨论】:
标签: django django-admin django-authentication
我注意到当我以管理员身份登录时,访问非管理员区域时不需要重新验证。
但是,当我以简单用户身份登录并访问管理区域时,Django 当然会检查我是否是管理员。
这个检查发生在哪里?我想限制版主访问网站的非管理部分,所以需要检查一下。 谢谢。
【问题讨论】:
标签: django django-admin django-authentication
使用@user_passes_test 装饰器:
from django.contrib.auth.decorators import user_passes_test
def not_staff_user(user):
return not user.is_staff
@user_passes_test(not_staff_user)
def my_view(request):
...
如果您想限制除/admin/ 之外的所有页面,那么中间件是一个不错的选择:
from django.conf import settings
from django.shortcuts import redirect
class NonStaffMiddleware(object):
def process_request(self, request):
if request.user.is_staff and not \
(request.path.startswith('/admin/') or
request.path.startswith(settings.LOGIN_URL) or
request.path.startswith(settings.LOGOUT_URL)):
return redirect(settings.LOGIN_URL)
【讨论】:
您可以在视图或模板中使用user.is_staff、user.is_superuser 和user.is_authenticated 函数来检查这一点。如果您需要在模板中执行此操作,则用户在 {{ request.user }} 中,并且在您的视图中使用 request.user。
【讨论】: