将管理员/访问权限限制为匿名用户而不是django

时间:2019-03-20 22:47:49

标签: django django-admin

我有一个新应用:

  

newApp

有3个用户

  

[admin,user1,user2]

和一个登录页面(不是来自/ admin /)。是否可以限制/重定向对django管理员登录的访问?我想只是进入admin /路径,如果用户登录了IS和admin,这意味着如果im未登录也未以普通用户身份登录,则该目录不起作用。

2 个答案:

答案 0 :(得分:0)

您可以编写一个自定义视图装饰器,以检查用户是否为admin,以及是否未引发Http404,例如:

def user_is_admin(function):
    def wrap(request, *args, **kwargs):
        if request.user.is_authenticated and request.user.is_admin:
            return function(request, *args, **kwargs)
        else:
            raise Http404
    return wrap

user.is_admin将是一个自定义实现,仅是一个示例。现在,您只需要包装视图即可

@user_is_admin
def my_view(request):
    ...

答案 1 :(得分:0)

我添加此答案是因为Pedro提供的答案无法回答我试图找出的部分,而不是让任何人访问/ admin /路径。

我用Django-Decorator-Include将其与Pedro的自定义装饰器混合

而我的urls.py上的结果是:

from decorator_include import decorator_include
from django.core.exceptions import PermissionDenied

def user_is_admin(function):
    def wrap(request, *args, **kwargs):
        if request.user.is_authenticated and request.user.is_staff:
            return function(request, *args, **kwargs)
        else:
            raise PermissionDenied
    return wrap

urlpatterns = [
    .....
    path('admin/', decorator_include([user_is_admin], admin.site.urls)),
    .....
]