Проверьте разрешение внутри шаблона в Django - PullRequest
67 голосов
/ 27 февраля 2012

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

И что еще более важно, я должен сделать это вообще, или это не «путь Джанго»?

Ответы [ 3 ]

157 голосов
/ 28 февраля 2012

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

{% 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)

2 голосов
/ 08 марта 2014

Если вам нужна дополнительная детализация при проверке разрешений (например, для конкретного объекта), проверьте это расширение: http://django -authority.readthedocs.org / en / latest / check_templates /

0 голосов
/ 24 мая 2019

Протестировано на 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]
  • delete [Например, Utilization.delete_invoicetype]
  • add [Например, Utilization.add_invoicetype]

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

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

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

...