Coverage for authentication\permissions.py: 57%

14 statements  

« 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. 

3 

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""" 

7 

8from rest_framework.permissions import BasePermission 

9 

10 

11class IsAdmin(BasePermission): 

12 """ 

13 Permission pour les administrateurs uniquement. 

14 

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 """ 

18 

19 def has_permission(self, request, view): 

20 """ 

21 Vérifie si l'utilisateur a les permissions d'administrateur. 

22 

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" 

29 

30 

31class IsAdminOrAuthenticatedReadOnly(BasePermission): 

32 """ 

33 Permission pour admin (accès complet) ou utilisateurs authentifiés (lecture seule). 

34 

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 """ 

39 

40 def has_permission(self, request, view): 

41 """ 

42 Vérifie les permissions selon le rôle et la méthode HTTP. 

43 

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") 

54 

55 

56class IsAdminOrEmploye(BasePermission): 

57 """ 

58 Permission pour les administrateurs et employés uniquement. 

59 

60 Accorde l'accès aux utilisateurs authentifiés ayant les rôles 

61 ``admin`` ou ``employe``. Exclut les clients et utilisateurs anonymes. 

62 """ 

63 

64 def has_permission(self, request, view): 

65 """ 

66 Vérifie si l'utilisateur est admin ou employé. 

67 

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")