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
« 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
7class User(AbstractBaseUser, PermissionsMixin):
8 """
9 Modèle d'utilisateur personnalisé basé sur l'email.
11 Utilise l'email comme identifiant unique et introduit un système de rôles
12 pour distinguer les clients, employés et administrateurs.
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 """
26 ROLE_CHOICES = (
27 ('client', 'Client'),
28 ('admin', 'Admin'),
29 ('employe', 'Employé'),
30 )
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 )
56 USERNAME_FIELD = 'email'
57 REQUIRED_FIELDS = []
59 objects = UserManager()
61 def has_admin_access(self) -> bool:
62 """
63 Vérifie si l'utilisateur a des privilèges d'administrateur.
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'
70 def get_full_name(self) -> str:
71 """
72 Retourne le nom complet de l'utilisateur.
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
79 def get_short_name(self) -> str:
80 """
81 Retourne un nom court de l'utilisateur.
83 :return: Le prénom s'il existe, sinon l'email
84 :rtype: str
85 """
86 return getattr(self, "prenom", None) or self.email
88 def __str__(self) -> str:
89 """
90 Représentation textuelle de l'utilisateur.
92 :return: L'adresse email de l'utilisateur
93 :rtype: str
94 """
95 return self.email
97 class Meta:
98 """
99 Métadonnées du modèle User.
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"]