Метод has_module_perms

Метод has_module_perms применяется к объекту пользователя и возвращает True, если пользователь имеет хотя бы одно разрешение (permission) в указанном приложении. Метод принимает один обязательный аргумент - имя модуля (приложения) в формате 'app_label'. Этот метод полезен для быстрой проверки доступа к функциональности целого приложения, без необходимости проверять каждое разрешение отдельно.

Синтаксис

pythonuser.has_module_perms(app_label)

Параметры

Метод принимает один параметр:

Возвращаемое значение:

Пример . Проверка прав на модуль

Давайте проверим, имеет ли текущий пользователь права доступа к приложению 'auth':

pythonfrom django.contrib.auth import get_user_model

User = get_user_model()
user = User.objects.get(username='john_doe')

if user.has_module_perms('auth'):
  print("User has permissions in auth app")
else:
  print("User has no permissions in auth app")

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

python"User has permissions in auth app"

Пример . Проверка прав на собственное приложение

Проверим, имеет ли пользователь права в приложении 'blog', где у него есть разрешение на добавление статей:

pythonfrom django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from blog.models import Article

User = get_user_model()
user = User.objects.get(username='editor')

# Добавляем пользователю разрешение на добавление статей
content_type = ContentType.objects.get_for_model(Article)
permission = Permission.objects.get(
  codename='add_article',
  content_type=content_type
)
user.user_permissions.add(permission)

# Проверяем права на модуль 'blog'
if user.has_module_perms('blog'):
  print("User has permissions in blog app")
else:
  print("User has no permissions in blog app")

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

python"User has permissions in blog app"

Пример . Проверка прав анонимного пользователя

Проверим права для анонимного пользователя на приложение 'auth':

pythonfrom django.contrib.auth.models import AnonymousUser

anonymous_user = AnonymousUser()
res = anonymous_user.has_module_perms('auth')
print(res)

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

python"False"

Пример . Проверка прав суперпользователя

Проверим, что суперпользователь имеет права на любой модуль:

pythonfrom django.contrib.auth import get_user_model

User = get_user_model()
superuser = User.objects.get(username='admin', is_superuser=True)

# Суперпользователь имеет права на все модули
res_auth = superuser.has_module_perms('auth')
res_blog = superuser.has_module_perms('blog')
print(f"Auth app: {res_auth}")
print(f"Blog app: {res_blog}")

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

python"Auth app: True"
"Blog app: True"

Пример . Использование в шаблоне

Метод можно использовать в шаблонах для условного отображения элементов интерфейса в зависимости от прав на модуль:

html{% if user.has_module_perms('blog') %}
  <a href="/admin/blog/">Управление блогом</a>
{% endif %}

В этом примере ссылка на управление блогом будет показана только тем пользователям, у которых есть права на приложение 'blog'.

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

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