разрешить вход только суперпользователю - PullRequest
16 голосов
/ 10 сентября 2009

Я написал страницу 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

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

Ответы [ 3 ]

50 голосов
/ 10 сентября 2009

Попробуйте:

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):
    # ...
1 голос
/ 07 мая 2015

Код, который вы предложили, идеально подходит для меня, я использовал его во многих проектах, начиная с 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.

0 голосов
/ 07 декабря 2017

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

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

...