Python Django admin.site.url仅可供超级用户访问(管理员登录页仅可供超级用户访问)
我想要的是将django管理员登录页面的访问权限限制为仅超级用户。意思是如果您不是超级用户,并尝试访问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
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
]
在myviews.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
- 未登录的访问者可以进入管理员页面
- 任何人都不能从管理员页面登录,除非在其他地方登录并在之后访问管理员
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方面的正常用户限制无关。无论如何,谢谢。