feat: Semaine 9
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user