Как сделать в Django пользовательское промежуточное ПО для ограничения пользователей?

urls.py

path('panel/', include('panel.urls')),
path('', include('base.urls')),
  1. пользователю не суперадмину запрещен доступ к panel.urls
  2. пользователю суперадмин разрешен доступ к panel.urls

middllware.py

# panel/middleware.py

from django.shortcuts import redirect
from django.urls import reverse

class AdminRestrictMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.path.startswith('/panel/'):
            if request.user.is_authenticated:
                if not request.user.is_superuser:
                    # If the user is not an admin, redirect them to a restricted page
                    return redirect(reverse('restricted_access'))  
            else:
                # If the user is not logged in, redirect them to the login page
                return redirect(reverse('login'))  
        
        response = self.get_response(request)
        return response
Вернуться на верх