Exercices Fonctions & Modules Decorateur d'autorisation (cas reel)
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Decorateur d'autorisation (cas reel)

Pour finir cette serie, un exercice qui ressemble a ce qu'on fait dans la vraie vie. Dans une application web, tu veux souvent restreindre l'acces a certaines fonctions selon le role de l'utilisateur.

L'idee : un decorateur parametrise qui prend une liste de roles autorises. Avant d'exécuter la fonction, il vérifie que l'utilisateur (passe comme premier argument) a le bon role.

On va simuler ca avec un simple dictionnaire utilisateur qui a une clé 'role'.

Écris un decorateur parametrise autoriser(*roles_permis) qui vérifie que le premier argument de la fonction est un dictionnaire avec une clé 'role' dont la valeur est dans les roles permis. Si le role n'est pas autorise, leve une PermissionError.

Exemple :
@autoriser('admin', 'moderateur')
def supprimer_utilisateur(user, cible):
return f'{cible} supprime'

admin = {'nom': 'Alice', 'role': 'admin'}
visiteur = {'nom': 'Bob', 'role': 'visiteur'}

supprimer_utilisateur(admin, 'Charlie') renvoie 'Charlie supprime'
supprimer_utilisateur(visiteur, 'Charlie') leve PermissionError

Tests (3/4)

Admin autorise
@autoriser('admin')
def action(user):
    return 'ok'
assert action({'nom': 'A', 'role': 'admin'}) == 'ok'
Visiteur refuse
@autoriser('admin')
def action(user):
    return 'ok'
try:
    action({'nom': 'B', 'role': 'visiteur'})
    assert False
except PermissionError:
    assert True
Plusieurs roles
@autoriser('admin', 'moderateur')
def moderer(user, msg):
    return f'{msg} modere'
assert moderer({'nom': 'C', 'role': 'moderateur'}, 'spam') == 'spam modere'

+ 0 tests cachés

Indices (3 disponibles)

solution.py