РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
549 of 818 menu

Метод has_module_perms

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

Синтаксис

user.has_module_perms(app_label)

Параметры

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

  • app_label - строковое имя приложения (модуля), для которого проверяется наличие прав доступа (например, 'auth', 'blog', 'myapp').

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

  • True - если у пользователя есть хотя бы одно разрешение в указанном приложении.
  • False - если у пользователя нет ни одного разрешения в указанном приложении.

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

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

from 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")

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

"User has permissions in auth app"

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

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

from 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")

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

"User has permissions in blog app"

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

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

from django.contrib.auth.models import AnonymousUser anonymous_user = AnonymousUser() res = anonymous_user.has_module_perms('auth') print(res)

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

"False"

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

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

from 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}")

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

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

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

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

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

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

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

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