Posso usar a verificação de permissão do aplicativo Auth dentro de um template no Django? (Quero exibir um formulário simples no final do modelo para usuários privilegiados)
E o mais importante, devo fazer isso ou esse não é o "jeito do Django"?
Posso usar a verificação de permissão do aplicativo Auth dentro de um template no Django? (Quero exibir um formulário simples no final do modelo para usuários privilegiados)
E o mais importante, devo fazer isso ou esse não é o "jeito do Django"?
Respostas:
Se você estiver procurando por permissões em modelos, o código a seguir será suficiente:
{% if perms.app_label.can_do_something %}
<form here>
{% endif %}
Onde modelo se refere ao modelo para o qual o usuário precisa de permissões para ver o formulário.
Consulte https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions para obter mais exemplos.
As permissões do usuário conectado atualmente são armazenadas na variável de modelo
{{ perms }}
(Isto requer o seguinte contexto processador para ser activado: django.contrib.auth.context_processors.auth
)
perms.app_label.foobar
sempre será verdadeiro, mesmo se você digitou incorretamente o nome da permissão.
Testado em Django 2.0 +
Se você quiser ver todas as permissões que o usuário conectado tem, em seu modelo (.html), imprima:
{{ perms.app_name }}
Ou
{{ perms }}
Para verificar se o usuário tem permissão, use:
{% if perms.app_name.change_model_name_lower_cased %}
Por exemplo :
{% if perms.Utilization.change_invoice %}
Aqui: Utilização é o nome do meu aplicativo. Fatura é um nome de modelo.
Observe que, em geral, haverá 4 tipos de permissões:
Além disso, se você deseja ver todas as permissões que um usuário possui devido aos grupos aos quais ele pertence, inicie o shell do Django ...
user = User.objects.get(username='somename')
user.get_group_permissions()
Aqui, todas as permissões listadas são devidas aos grupos aos quais ele pertence.
Se precisar de mais granularidade na verificação de permissões (em um objeto específico, por exemplo), verifique esta extensão: http://django-authority.readthedocs.org/en/latest/check_templates/