Coverage for users\models\base_user.py: 85%

26 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 15:18 +0200

1from django.db import models 

2from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin 

3from users.managers import UserManager 

4from django.utils import timezone 

5 

6 

7class User(AbstractBaseUser, PermissionsMixin): 

8 """ 

9 Modèle d'utilisateur personnalisé basé sur l'email. 

10 

11 Utilise l'email comme identifiant unique et introduit un système de rôles 

12 pour distinguer les clients, employés et administrateurs. 

13 

14 :ivar email: Adresse email unique servant d'identifiant 

15 :vartype email: str 

16 :ivar role: Rôle de l'utilisateur (client, admin, employe) 

17 :vartype role: str 

18 :ivar is_active: Statut actif de l'utilisateur 

19 :vartype is_active: bool 

20 :ivar is_staff: Accès à l'interface d'administration Django 

21 :vartype is_staff: bool 

22 :ivar date_joined: Date de création du compte 

23 :vartype date_joined: datetime 

24 """ 

25 

26 ROLE_CHOICES = ( 

27 ('client', 'Client'), 

28 ('admin', 'Admin'), 

29 ('employe', 'Employé'), 

30 ) 

31 

32 email = models.EmailField( 

33 unique=True, 

34 db_index=True, 

35 help_text="Adresse email unique servant d'identifiant" 

36 ) 

37 role = models.CharField( 

38 max_length=10, 

39 choices=ROLE_CHOICES, 

40 default="client", 

41 help_text="Rôle de l'utilisateur dans le système" 

42 ) 

43 is_active = models.BooleanField( 

44 default=True, 

45 help_text="Indique si l'utilisateur est actif" 

46 ) 

47 is_staff = models.BooleanField( 

48 default=False, 

49 help_text="Accès à l'interface d'administration Django" 

50 ) 

51 date_joined = models.DateTimeField( 

52 default=timezone.now, 

53 help_text="Date de création du compte" 

54 ) 

55 

56 USERNAME_FIELD = 'email' 

57 REQUIRED_FIELDS = [] 

58 

59 objects = UserManager() 

60 

61 def has_admin_access(self) -> bool: 

62 """ 

63 Vérifie si l'utilisateur a des privilèges d'administrateur. 

64 

65 :return: True si l'utilisateur est staff ou a le rôle admin 

66 :rtype: bool 

67 """ 

68 return self.is_staff or self.role == 'admin' 

69 

70 def get_full_name(self) -> str: 

71 """ 

72 Retourne le nom complet de l'utilisateur. 

73 

74 :return: Le nom complet s'il existe, sinon l'email 

75 :rtype: str 

76 """ 

77 return getattr(self, "nom", None) and getattr(self, "prenom", None) or self.email 

78 

79 def get_short_name(self) -> str: 

80 """ 

81 Retourne un nom court de l'utilisateur. 

82 

83 :return: Le prénom s'il existe, sinon l'email 

84 :rtype: str 

85 """ 

86 return getattr(self, "prenom", None) or self.email 

87 

88 def __str__(self) -> str: 

89 """ 

90 Représentation textuelle de l'utilisateur. 

91 

92 :return: L'adresse email de l'utilisateur 

93 :rtype: str 

94 """ 

95 return self.email 

96 

97 class Meta: 

98 """ 

99 Métadonnées du modèle User. 

100 

101 :cvar verbose_name: Nom lisible au singulier 

102 :vartype verbose_name: str 

103 :cvar verbose_name_plural: Nom lisible au pluriel 

104 :vartype verbose_name_plural: str 

105 :cvar ordering: Ordre par défaut des utilisateurs 

106 :vartype ordering: list 

107 """ 

108 verbose_name = "Utilisateur" 

109 verbose_name_plural = "Utilisateurs" 

110 ordering = ["email"]