将管理 url 限制为已在 Django 中经过身份验证的超级用户
Restricting admin urls to already authenticated superusers in Django
我四处寻找一些解决方案,但它们都集中在一个管理员 url 上。但是我想知道是否有办法限制所有管理员视图,而不是已经通过身份验证的超级用户的帐户。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^accounts/', include('accounts.urls'))
]
我要的是
urlpatterns = [
url(r'^admin/', is_superuser(admin.site.urls)),
url(r'^accounts/', include('accounts.urls'))
]
或者我可以在视图中执行的类似操作
@user_passes_test(lambda u: u.is_superuser, login_url='allauth.account.views.LoginView')
def superuser_only(request, template):
return render(request, template)
但仍然允许我使用 admin.site.urls
。
有没有快速优雅的方法来解决这个问题?我希望包括超级用户在内的所有用户都通过 accounts
app.
进行身份验证
您可以创建一个中间件 class 来检查 request.path
和 user
并将其添加到您设置中的 MIDDLEWARE
var。
from django.http import Http404
class SuperUserMiddleware(object):
def process_request(self, request):
user = request.user
is_anonymous = user.is_anonymous()
if 'admin' in request.path
if not is_anonymous:
if not user.is_superuser:
raise Http404
else:
raise Http404
我四处寻找一些解决方案,但它们都集中在一个管理员 url 上。但是我想知道是否有办法限制所有管理员视图,而不是已经通过身份验证的超级用户的帐户。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^accounts/', include('accounts.urls'))
]
我要的是
urlpatterns = [
url(r'^admin/', is_superuser(admin.site.urls)),
url(r'^accounts/', include('accounts.urls'))
]
或者我可以在视图中执行的类似操作
@user_passes_test(lambda u: u.is_superuser, login_url='allauth.account.views.LoginView')
def superuser_only(request, template):
return render(request, template)
但仍然允许我使用 admin.site.urls
。
有没有快速优雅的方法来解决这个问题?我希望包括超级用户在内的所有用户都通过 accounts
app.
您可以创建一个中间件 class 来检查 request.path
和 user
并将其添加到您设置中的 MIDDLEWARE
var。
from django.http import Http404
class SuperUserMiddleware(object):
def process_request(self, request):
user = request.user
is_anonymous = user.is_anonymous()
if 'admin' in request.path
if not is_anonymous:
if not user.is_superuser:
raise Http404
else:
raise Http404