web-dev-qa-db-fra.com

Vérifiez l'autorisation à l'intérieur d'un modèle dans Django

Puis-je utiliser la vérification des autorisations de l'application Auth dans un modèle dans Django? (Je souhaite afficher un formulaire simple à la fin du modèle pour les utilisateurs privilégiés)

Et plus important encore, dois-je le faire ou n'est-ce pas la "voie Django"?

69
Daniel

Si vous cherchez à vérifier les autorisations dans les modèles, le code suivant suffira:

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

Où modèle fait référence au modèle pour lequel l'utilisateur a besoin d'autorisations pour voir le formulaire.

Reportez-vous à https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions pour plus d'exemples.

Les autorisations de l'utilisateur actuellement connecté sont stockées dans la variable de modèle {{ perms }}

(Cela nécessite l'activation du processeur de contexte suivant: Django.contrib.auth.context_processors.auth)

160
Victor Neo

Si vous avez besoin de plus de granularité dans la vérification des perms (sur un objet particulier par exemple), consultez cette extension: http://Django-authority.readthedocs.org/en/latest/check_templates/

2
lai

Testé sur Django 2.0 +

Si vous souhaitez voir toutes les autorisations de l'utilisateur connecté, sur votre modèle (.html), imprimez:

{{ perms.app_name }}

Ou

{{ perms }}

Afin de vérifier si l'utilisateur a l'autorisation, utilisez:

{% if perms.app_name.change_model_name_lower_cased %}

Par exemple:

{% if perms.Utilization.change_invoice %}

Ici: L'utilisation est le nom de mon application. La facture est un nom de modèle.

Notez qu'en général, il y aura 4 types d'autorisations:

  • changer [Par exemple, Utilization.change_projectemail]
  • afficher [Par exemple, Utilization.view_invoice]
  • supprimer [Par exemple, Utilization.delete_invoicetype]
  • ajouter [Par exemple, Utilization.add_invoicetype]

De plus, si vous voulez voir toutes les autorisations d'un utilisateur en raison des groupes auxquels il appartient, lancez Django Shell ...

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

Ici, toutes les autorisations répertoriées sont dues aux groupes auxquels il appartient.

1