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

时间:2019-01-08 08:36:41

标签: python django django-templates

我想要的是将对django管理员登录页面的访问限制为仅超级用户。这意味着如果您不是超级用户,并尝试访问http://127.0.0.1:8000/admin-应该将您重定向到404 page之类的东西。执行此身份验证的方式或自定义视图是挑战。请有人帮我提示如何做吗?

  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
 ]

在我的views.py中,我具有执行身份验证的以下功能

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

         else:
             # return render(404_page)

是的。

2 个答案:

答案 0 :(得分:1)

我认为在所描述的场景中可能存在捕获 22。

  1. 要检查用户权限,应该有一个登录用户
  2. 如果您只检查可用用户 - is_superuser 并显示 404:
  • 已登录,非超级用户将收到 404
  • 未登录的访客可以进入管理页面
  1. 如果添加检查用户是否已登录,如果没有则显示 404:
  • 没有人可以从管理页面登录,除非在其他地方登录并在之后进入管理

这两种情况在我看来都不一致。我认为您想要实现的目标是由 Django 框架以稍微不同的方式完成的。


has_permission() 中的 AdminSite 类中有 django.contrib.admin.sites,其中

<块引用>

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

并且默认返回 request.user.is_active and request.user.is_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登录也会提示权限不足提示重新登录

答案 1 :(得分:0)

默认情况下,django admin仅允许超级用户或东西用户登录。因此,拥有管理员登录面板是一种安全的方法。另外,如果您想限制该登录路径,我认为最好在该特定路由上放置防火墙。这样,只有列入白名单的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;
}

article可能对配置有所帮助。