J'essaye, en vain, de créer un simple tag de modèle Django pour afficher ou masquer un lien "supprimer" à côté d'un commentaire soumis sur mon site. En un mot, je veux passer l'objet de commentaire à la balise de modèle, déterminer si l'utilisateur actuellement connecté est autorisé à supprimer le commentaire, puis afficher ou ne pas afficher le lien.Comment écrire une balise de modèle Django pour le contrôle d'accès?
L'utilisation de mon modèle serait comme si:
{% load access_tags %}
{% if_authorized comment %}
<a href="{% url delete_comment comment.id %}">Delete</a>
{% endif_authorized %}
Soyez assurés que je vérifie aussi dans la vue appropriée si l'utilisateur est autorisé à supprimer le commentaire.
Ce type d'étiquette a-t-il un nom spécifique? Cela m'aiderait certainement avec mes recherches Google si c'était le cas. Merci de votre aide!
MISE À JOUR 1:
La façon dont mon site fonctionne, deux personnes sont potentiellement autorisés à supprimer un commentaire: 1) le créateur de commentaire et 2) le propriétaire du poste où le commentaire a été laissé. Pour cette raison, je dois déterminer, par commentaire, si l'une de ces conditions est présente. Je ne pense pas que je puisse utiliser quelque chose comme le sytème d'autorisation intégré de Django, car il nécessite que les permissions "soient définies globalement par type d'objet, pas par instance d'objet spécifique". Dans mon cas, l'utilisateur "Bob" peut avoir des permissions pour supprimer un commentaire (s'il l'a écrit ou s'il est sur un post qu'il a créé), mais il peut aussi ne pas être autorisé à le supprimer (s'il regarde un commentaire sur le message de quelqu'un d'autre).
MISE À JOUR 2:
Il semble que vous ne pouvez pas passer des objets à une balise de modèle, seules les chaînes: « Bien que vous puissiez passer un certain nombre d'arguments à une balise de modèle à l'aide token.split_contents(), les arguments sont tous décompressés sous forme de littéraux de chaîne. " Je suppose que je vais passer l'ID de l'objet de commentaire en question et le tirer dans l'étiquette.
j'avais tort à ce sujet, ont juste pour accéder au passé dans l'objet comme:
self.comment.resolve(context).user
contre
self.comment.user
solution cool, je l'ai adapté afin que vous puissiez vérifier la permission de l'utilisateur. vous pouvez aussi les imbriquer, ce qui est très practiacal! Merci –