Django Staff Member Required Decorator делает бесконечный цикл, если доступ запрещен

Я использую декоратор Django staff_member_required для защиты административной области сайта.

Я использую его следующим образом

@staff_member_required(login_url=reverse_lazy('account_login'))
def kommando_home(request):
    # business logic
    return render(request, 'kommando/home.html', context)

Я использую пользовательский вход, поэтому пользователи не видят страницу входа Django, если они переходят по URL.

Однако, если пользователь, не имеющий права доступа к персоналу, входит в систему, это приводит к следующему: enter image description here

Я могу добавить параметр redirect в декоратор, но это всегда перенаправляет пользователя на указанный url, даже если у пользователя есть разрешение.

Я пытался настроить декоратор, но не вижу никакого способа проверить, поднимается ли вопрос об отказе в разрешении.

Причина бесконечного цикла заключается в следующем. Требование @staff_member_required не выполняется, поскольку пользователь не является сотрудником, что приводит пользователя к login_url, но пользователь уже вошел в систему, поэтому account_login приводит пользователя к параметру next, который является исходной страницей с staff_member_required и т.д...

Вместо этого можно попробовать проверить наличие разрешения в самом представлении, а затем перенаправить оттуда:

Посмотрите ответ Serafeim на Как проверить разрешения пользователя в views.py?

Использовать has_perm:

Итак, изнутри вашего get_context_data вы можете сделать что-то вроде этого:

if self.request.user.has_perm('applications.admin_access'):
    # redirect to one page
else:
    # redirect to the other page
Вернуться на верх