Атрибут is_staff
Атрибут is_staff класса User является булевым полем, которое указывает, может ли пользователь входить в административную панель Django. Он используется для разграничения доступа к интерфейсу администратора: если атрибут установлен в True, пользователь считается персоналом и получает доступ к админке, при условии что он также аутентифицирован и активен. Этот атрибут не предоставляет автоматически никаких дополнительных прав на изменение данных, но служит первым уровнем проверки при доступе к административному интерфейсу.
Синтаксис
Атрибут доступен для чтения и записи у экземпляра модели User:
from django.contrib.auth.models import User
user = User.objects.get(username='john')
if user.is_staff:
print("User is staff member")
else:
print("User is not staff member")
При создании нового пользователя атрибут по умолчанию имеет значение False. Для создания суперпользователя с установленным is_staff=True используется специальная команда или метод:
from django.contrib.auth.models import User
# Создание обычного пользователя
user = User.objects.create_user(username='john', password='pass123')
print(user.is_staff) # Выведет: False
# Создание пользователя с правами персонала
staff_user = User.objects.create_user(username='admin', password='admin123')
staff_user.is_staff = True
staff_user.save()
Пример . Со списком пользователей
Получим список всех пользователей и выведем информацию о том, является ли каждый из них персоналом:
from django.contrib.auth.models import User
users = User.objects.all()
for user in users:
status = "staff" if user.is_staff else "regular"
print(f"{user.username}: {status}")
Результат выполнения кода:
"john: regular"
"admin: staff"
"alice: regular"
Пример . Проверка прав в представлении
Проверим, имеет ли текущий пользователь доступ к административной панели, используя атрибут is_staff:
from django.contrib.auth.models import User
from django.http import HttpResponse
def check_admin_access(user_id):
user = User.objects.get(id=user_id)
if user.is_staff and user.is_active:
return HttpResponse("Access granted to admin panel")
return HttpResponse("Access denied")
Пример . Работа с декоратором
В Django существует встроенный декоратор staff_member_required, который проверяет атрибут is_staff и перенаправляет неавторизованных пользователей:
from django.contrib.admin.views.decorators import staff_member_required
from django.http import HttpResponse
@staff_member_required
def admin_dashboard(request):
return HttpResponse("Welcome to admin dashboard")
Смотрите также
-
атрибут
is_superuser,
который предоставляет все права без ограничений -
атрибут
is_active,
который определяет активность учётной записи -
атрибут
is_authenticated,
который проверяет, аутентифицирован ли пользователь -
метод
create_superuser,
который создает суперпользователя со всеми правами