Python Django admin.site.url仅可供超级用户访问(管理员登录页仅可供超级用户访问)

Python Django admin.site.url仅可供超级用户访问(管理员登录页仅可供超级用户访问),python,django,django-templates,Python,Django,Django Templates,我想要的是将django管理员登录页面的访问权限限制为仅超级用户。意思是如果您不是超级用户,并尝试访问http://127.0.0.1:8000/admin-您应该被重定向到404页,类似这样的页面。执行此身份验证的方法或自定义视图是一个挑战。请有人帮我提示一下怎么做 urlpatterns = [ path('admin/', my_custom_function,name="check_if_superuser"), # when somebody hits th

我想要的是将django管理员登录页面的访问权限限制为仅超级用户。意思是如果您不是超级用户,并尝试访问
http://127.0.0.1:8000/admin
-您应该被重定向到404页,类似这样的页面。执行此身份验证的方法或自定义视图是一个挑战。请有人帮我提示一下怎么做

  urlpatterns = [
     path('admin/', my_custom_function,name="check_if_superuser"),


     # when somebody hits this url pattern , he/she should be taken to the 
     # function above for checking if superuser befor being redirected to 
     # django admin login page
 ]
在my
views.py
中,我有以下功能来进行身份验证

    def  my_custom_function(request):
         if request.user.is_superuser():
            #... redirect to django admin login page

         else:
             # return render(404_page)

是的,大概是这样。

默认情况下,django管理员只允许超级用户或其他用户登录。所以,有一个管理员登录面板是安全的。此外,如果您想限制该登录路径,我认为最好在该特定路径上设置防火墙。这样只有白名单上的IP才能访问它。您可以使用NGINX进行此操作,配置应如下所示:

location /admin {
  # block one workstation
  deny    192.168.1.1;
  # allow anyone in 192.168.1.0/24
  allow   192.168.1.0/24;
  # drop rest of the world 
  deny    all;
}

这可能对配置很有帮助。

我假设在所描述的场景中可能存在第22条陷阱

  • 要检查用户权限,应该有一个已登录的用户
  • 如果只检查可用用户-是超级用户并显示404:
    • 登录后,非超级用户将收到404
    • 未登录的访问者可以进入管理员页面
  • 如果添加,请检查用户是否已登录,如果未登录,请同时显示404:
    • 任何人都不能从管理员页面登录,除非在其他地方登录并在之后访问管理员
    这两种情况在我看来都不一致。我认为您试图实现的目标是由Django框架以稍微不同的方式完成的


    django.contrib.admin.sites
    中的
    has_permission()

    如果给定的HttpRequest具有查看管理站点中至少一个页面的权限,则返回True

    默认情况下,返回
    request.user.is\u active和request.user.is\u staff
    如果在admin.py中更改,则只有活动超级用户才能使用admin:

    from django.contrib import admin
    
    def has_superuser_permission(request):
        return request.user.is_active and request.user.is_superuser
    
    # Only active superuser can access root admin site (default)
    admin.site.has_permission = has_superuser_permission
    

    即使登录了非SUP,也会显示有关权限不足的消息,并提示重新登录

    这听起来很好,有什么问题?我在哪里可以找到或重定向到django管理员登录模板?当您注销时,如何访问/admin URL进行管理员登录?默认情况下,django会在您尝试访问/admin时将您重定向到登录URL。我应该只对登录的用户执行检查,看看他们是否是超级用户。查看此帖子,您可以执行类似操作:我没有投反对票,但这似乎根本无法回答问题。(无论如何,这个问题没有多大意义。)嗯,IMHO,这种限制(当用户应该访问管理站点时)应该在NGINX、Apache等中完成,而不是在django应用程序中完成。的确,答案与django方面的正常用户限制无关。无论如何,谢谢。