Permissions pour lister ou inspecter un modèle avec wagtail
Wagtail a un comportement par défaut un peu déconcertant sur les
autorisation d'accès aux éléments d'un modèle. Par exemple,
considérons un modèle Teacher et sa représentation TeacherAdmin dans
la page admin de wagtail.
# fichier models.py
pass
# fichier wagtail_hooks.py
=
On dispose d'une interface nous permettant d'attribuer des
permissions, par défaut add_teacher, change_teacher, delete_teacher et
view_teacher sont présentes.

Un utilisateur n'ayant pas les droits view_teacher, ne pourra donc pas
lister ou inspecter un enseignant dans la page admin. Mais, si une
seule autre permission lui est assignée, ce sera le cas.
Cela paraît logique: si un utilisateur peut modifier un enseignant, alors il doit pouvoir les lister ou l'inspecter. Seulement, on peut parfois avoir besoin d'ajouter une permission spéciale, qui ne nécessite pas de lister les enseignants, mais autorise l'utilisateur à réaliser certaines actions (en lui laissant accéder à une vue personnalisée). Dans ce cas, lui donner cette permission aura pour effet de lui permettre de lister tous les enseignants, ce qui n'est pas forcément souhaité.
Si on regarde l'implémentation de user_can_list() ou
user_can_inspect_object() dans wagtail, on remarque que la
permission est accordée si user_has_any_permissions(), i.e. si
l'utilisateur a au moins une autre permission sur le modèle. On va
changer ce comportement en définissant une nouvelle classe
StrictModelAdmin qui nous convient.
"""
Ne peut accéder ou lister les éléments modèle que si la permission
view_<model_name> est spécifiée et pas une autre.
"""
=
return
return
return and
=
On peut utiliser StrictModelAdmin dans les fichiers wagtail_hooks.py
en remplacement de ModelAdmin. Il faudra dès lors obligatoirement
cocher la permission view_<model_name> si l'on souhaite qu'un
utilisateur fasse des opérations CRUD sur des objets du modèle.