[英]Django admin.site.urls only accessible to superuser (The admin login page only accessible to superuser)
我想要的是将 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
]
在我的views.py
我有以下功能进行身份验证
def my_custom_function(request):
if request.user.is_superuser():
#... redirect to django admin login page
else:
# return render(404_page)
是这样的。
默认情况下,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;
}
本文可能对配置有所帮助。
我假设在描述的场景中可能有一个 catch 22。
这两种情况对我来说听起来不一致。 我认为您想要实现的目标是由 Django 框架以稍微不同的方式完成的。
在django.contrib.admin.sites
AdminSite
类中有has_permission()
如果给定的 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 登录也会显示权限不足的信息并提示重新登录
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.