Метод has_perm

Метод has_perm применяется к экземпляру класса User и возвращает True, если пользователь имеет указанное разрешение, и False в противном случае. Метод проверяет разрешения, назначенные пользователю напрямую, через группы, а также суперпользователю автоматически дает True для всех разрешений. В качестве аргумента метод принимает строку с именем разрешения в формате "app_label.codename" или "app_label.permission_name", а также опциональный параметр obj для проверки разрешений на конкретный объект.

Синтаксис

pythonuser.has_perm(perm, obj=None)

Пример

Давайте проверим, имеет ли пользователь разрешение на добавление статей:

pythonfrom django.contrib.auth.models import User
from myapp.models import Article

# Получаем пользователя
user = User.objects.get(username="john_doe")

# Проверяем разрешение на добавление статьи
has_perm = user.has_perm("myapp.add_article")
print(has_perm)

Результат выполнения кода:

pythonTrue

Пример

Давайте проверим несколько разрешений для пользователя:

pythonfrom django.contrib.auth.models import User

# Получаем пользователя
user = User.objects.get(username="jane_doe")

# Проверяем различные разрешения
can_add = user.has_perm("myapp.add_article")
can_change = user.has_perm("myapp.change_article")
can_delete = user.has_perm("myapp.delete_article")
can_view = user.has_perm("myapp.view_article")

print(f"Add: {can_add}")
print(f"Change: {can_change}")
print(f"Delete: {can_delete}")
print(f"View: {can_view}")

Результат выполнения кода:

python"Add: True"
"Change: False"
"Delete: False"
"View: True"

Пример

Давайте проверим разрешение суперпользователя:

pythonfrom django.contrib.auth.models import User

# Получаем суперпользователя
superuser = User.objects.get(username="admin")

# Суперпользователь имеет все разрешения
has_perm = superuser.has_perm("myapp.add_article")
print(has_perm)

Результат выполнения кода:

pythonTrue

Пример

Давайте проверим разрешение у анонимного пользователя:

pythonfrom django.contrib.auth.models import AnonymousUser

# Анонимный пользователь не имеет разрешений
anonymous = AnonymousUser()
has_perm = anonymous.has_perm("myapp.view_article")
print(has_perm)

Результат выполнения кода:

pythonFalse

Смотрите также

  • метод has_perms,
    который проверяет список разрешений
  • метод has_module_perms,
    который проверяет разрешения для целого модуля
  • декоратор permission_required,
    который ограничивает доступ к представлениям
  • декоратор user_passes_test,
    который выполняет пользовательскую проверку