Coverage for authentication\permissions.py: 57%
14 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Classes de permissions personnalisées pour l'API des Jeux Olympiques.
4Ce module définit les permissions spécifiques selon les rôles des utilisateurs :
5admin, employé et client, avec différents niveaux d'accès aux ressources.
6"""
8from rest_framework.permissions import BasePermission
11class IsAdmin(BasePermission):
12 """
13 Permission pour les administrateurs uniquement.
15 Accorde l'accès uniquement aux utilisateurs authentifiés ayant le rôle ``admin``.
16 Utilisée pour les opérations sensibles nécessitant les plus hauts privilèges.
17 """
19 def has_permission(self, request, view):
20 """
21 Vérifie si l'utilisateur a les permissions d'administrateur.
23 :param request: La requête HTTP
24 :param view: La vue appelée
25 :return: ``True`` si l'utilisateur est admin authentifié, sinon ``False``
26 :rtype: bool
27 """
28 return request.user.is_authenticated and getattr(request.user, "role", None) == "admin"
31class IsAdminOrAuthenticatedReadOnly(BasePermission):
32 """
33 Permission pour admin (accès complet) ou utilisateurs authentifiés (lecture seule).
35 - Les administrateurs ont un accès complet.
36 - Les autres utilisateurs authentifiés ne peuvent que consulter les données
37 (méthodes ``GET``, ``HEAD``, ``OPTIONS``).
38 """
40 def has_permission(self, request, view):
41 """
42 Vérifie les permissions selon le rôle et la méthode HTTP.
44 :param request: La requête HTTP
45 :param view: La vue appelée
46 :return: ``True`` si autorisé selon le rôle et la méthode, sinon ``False``
47 :rtype: bool
48 """
49 if not request.user.is_authenticated:
50 return False
51 if getattr(request.user, "role", None) == "admin":
52 return True
53 return request.method in ("GET", "HEAD", "OPTIONS")
56class IsAdminOrEmploye(BasePermission):
57 """
58 Permission pour les administrateurs et employés uniquement.
60 Accorde l'accès aux utilisateurs authentifiés ayant les rôles
61 ``admin`` ou ``employe``. Exclut les clients et utilisateurs anonymes.
62 """
64 def has_permission(self, request, view):
65 """
66 Vérifie si l'utilisateur est admin ou employé.
68 :param request: La requête HTTP
69 :param view: La vue appelée
70 :return: ``True`` si l'utilisateur est admin ou employé, sinon ``False``
71 :rtype: bool
72 """
73 return request.user.is_authenticated and getattr(request.user, "role", None) in ("admin", "employe")