Exercices Django Avancé AllowAny et IsAuthenticated
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

AllowAny et IsAuthenticated

Sur n'importe quelle appli web, certaines pages sont accessibles a tout le monde (la page d'accueil, le catalogue) et d'autres exigent d'etre connecte (le profil, le panier). DRF gere ca avec un systeme de permissions elegant : chaque permission est une classe avec une methode has_permission(request) qui retourne True ou False.

Les deux permissions de base sont :

AllowAny : autorise tout le monde, connecte ou pas. C'est la porte ouverte.

IsAuthenticated : autorise uniquement les utilisateurs connectes. Le request doit avoir un attribut is_authenticated a True.

On va aussi creer une fonction check_permissions(request, permission_classes) qui prend une requete et une liste de classes de permission, et retourne True si TOUTES les permissions sont accordees.

Tu vas simuler une requete comme un simple dictionnaire avec les cles 'method', 'user' et 'is_authenticated'.

Exemple :

request = {'method': 'GET', 'user': 'alice', 'is_authenticated': True}
perm = IsAuthenticated()
perm.has_permission(request) renvoie True

request2 = {'method': 'GET', 'user': None, 'is_authenticated': False}
perm.has_permission(request2) renvoie False

Tests (4/5)

AllowAny autorise tout
p = AllowAny()
assert p.has_permission({'method': 'GET', 'is_authenticated': False}) == True
assert p.has_permission({'method': 'POST', 'is_authenticated': True}) == True
IsAuthenticated vérifie auth
p = IsAuthenticated()
assert p.has_permission({'is_authenticated': True}) == True
assert p.has_permission({'is_authenticated': False}) == False
check_permissions toutes ok
req = {'is_authenticated': True}
assert check_permissions(req, [AllowAny, IsAuthenticated]) == True
check_permissions une echoue
req = {'is_authenticated': False}
assert check_permissions(req, [AllowAny, IsAuthenticated]) == False

+ 0 tests cachés

Indices (3 disponibles)

solution.py