0

我已经搜索了一些解决方案,但它们都集中在一个管理 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应用程序进行身份验证。

4

1 回答 1

2

您可以创建一个中间件类来检查request.pathanduser并将其添加到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
于 2017-11-08T20:47:45.777 回答