Подтвердить что ты не робот

Проверить разрешение внутри шаблона в Django

Можно ли использовать проверку разрешений приложения Auth внутри шаблона в Django? (Я хочу показать простую форму в конце шаблона для привилегированных пользователей)

И что еще более важно, должен ли я вообще это сделать или это не "способ Django"?

4b9b3361

Ответ 1

Если вы хотите проверить разрешения в шаблонах, следующий код будет достаточным:

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

Где модель относится к модели, которую пользователю нужны разрешения для просмотра формы для.

Подробнее см. https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions.

Существующие в настоящее время входные разрешения пользователя хранятся в переменной шаблона {{ perms }}

(Для этого необходимо включить следующий процессор контекста: django.contrib.auth.context_processors.auth)

Ответ 3

Проверено на Django 2.0+

Если вы хотите увидеть все разрешения, которые есть у вошедшего в систему пользователя, в вашем шаблоне (.html) выведите:

{{ perms.app_name }}

Или же

{{ perms }}

Чтобы проверить, есть ли у пользователя разрешение, используйте:

{% if perms.app_name.change_model_name_lower_cased %}

Например:

{% if perms.Utilization.change_invoice %}

Здесь: Использование - это имя моего приложения. Счет-фактура - это название модели.

Обратите внимание, что в целом будет 4 вида разрешений:

  • изменить [Например, Utilization.change_projectemail]
  • просмотреть [Например, Utilization.view_invoice]
  • удалить [например, Utilization.delete_invoicetype]
  • добавить [Например, Utilization.add_invoicetype]

Также, если вы хотите увидеть все разрешения, которые есть у пользователя из-за групп, к которым он принадлежит, запустите оболочку Django...

user = User.objects.get(username='somename')
user.get_group_permissions()

Здесь все перечисленные разрешения принадлежат тем группам, к которым он принадлежит.