Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Permission custom IsAuthorOrReadOnly
Imagine Twitter ou chaque utilisateur peut modifier ou supprimer ses propres tweets, mais pas ceux des autres. Les permissions de base ne suffisent plus ici : il faut verifier non seulement que l'utilisateur est connecte, mais qu'il est bien l'auteur de l'objet qu'il veut modifier.
Dans DRF, ca se fait avec les permissions au niveau de l'objet. En plus de has_permission (verification globale), tu ecris has_object_permission(request, obj) qui verifie si l'utilisateur a le droit sur un objet specifique.
La requête a un champ 'user' qui contient le nom de l'utilisateur connecte. L'objet (un article) a un champ 'author' qui contient le nom de son auteur.
Tu vas créer la classe IsAuthorOrReadOnly avec :
has_permission(request) : retourne True pour les méthodes safe (GET, HEAD, OPTIONS), sinon vérifie l'authentification.
has_object_permission(request, obj) : retourne True pour les méthodes safe. Pour les autres méthodes, retourne True seulement si request['user'] est egal a obj['author'].
Tu vas aussi écrire une fonction can_modify(request, article, permission) qui combine les deux vérifications : d'abord has_permission, puis has_object_permission. Retourne True seulement si les deux passent.