разрешить вход только суперпользователю

StackOverflow https://stackoverflow.com/questions/1404160

  •  05-07-2019
  •  | 
  •  

Вопрос

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

foo_view = staff_member_required(foo_view)

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

def foo_view(request):
       if not request.user.is_superuser:
           #render some "not allowed page"
       #else render the page

но, похоже, это не помогает, так как дает мне ошибки.

Это было полезно?

Решение

Пытаться:

from django.contrib.auth.decorators import user_passes_test

def foo_view(request):
    # ...
foo_view = user_passes_test(lambda u: u.is_superuser)(foo_view)

Или (с Python >= 2.4):

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def foo_view(request):
    # ...

Другие советы

Код, который вы предложили, отлично подходит для меня, я использовал его во многих проектах, начиная с Django 1.4:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def foo_view(request):
   if not request.user.is_superuser:
       return HttpResponse('The user is not superuser')

   # Do whatever you need to do

Этот код отлично работает для меня, начиная с Django 1.4 и заканчивая 1.7.

Приведенные выше ответы, похоже, относятся к очень ранним версиям django. Они немного сложнее, чем для более поздней версии.

для django 1.11 здесь немного похожая, но более простая стратегия. нажмите здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top