Метод 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,
который предоставляет методы для управления аутентификацией и правами