Files
live-campus-mcs-p-2027.2/Semaine_09/Decorateurs/required_role.py
T
gauvainboiche ce1f0e513a feat: Semaine 9
2026-05-15 16:24:56 +02:00

27 lines
855 B
Python

from dataclasses import dataclass, field
from typing import Callable
@dataclass
class User:
username: str
is_authenticated: bool = False
roles: list[str] = field(default_factory=lambda: ["user"])
def required_roles(roles: list[str]):
def wrapper(fonction: Callable):
def internal_wrapper(user: User):
if not any(role in user.roles for role in roles): # True => [False, False, True]
raise PermissionError(f"L'utilisateur {user.username} n'a pas le rôle requis.")
return fonction(user)
return internal_wrapper
return wrapper
@required_roles(["admin", "modo"])
def operation_sensible(user: User):
return f"Opération sensible faite par {user.username}"
alice = User("alice@courriel.fr", True, ["modo"])
bob = User("bob@courriel.fr", True)
print(operation_sensible(alice))