diff --git a/Auth/authentication.py b/Auth/authentication.py index 7d9c936..19f7027 100644 --- a/Auth/authentication.py +++ b/Auth/authentication.py @@ -27,20 +27,20 @@ class Auth(): user_psswd = None #On va récupérer les infos en BDD - quer = "SELECT Nom FROM utilisateur" link = dbo.DBLink() - result = link.query("SELECT Nom, MdP FROM utilisateur WHERE Identifiant = %s", [self.input_id, ]) + result = link.query("SELECT IDUtil, Nom, MdP FROM utilisateur WHERE Identifiant = %s", [self.input_id, ]) - for Nom, MdP in result: - user_id = Nom - user_psswd = MdP + for id_user, nom, mdp in result: + user_id = id_user + user_id = nom + user_psswd = mdp #Si l'user ID a été trouvé #On compare le mot de passe entré à celui récupéré en BDD, si ça matche, on renvoie True if user_id != None: if self.input_psswd.hexdigest() == user_psswd: Auth.access = True - Auth.current_user = user_id + Auth.current_user_id = id_user print("Accès autorisé") else: print("Accès refusé : Le mot de passe est incorrect") diff --git a/Users/Model.py b/Users/Model.py index 99c4d0f..bb77da2 100644 --- a/Users/Model.py +++ b/Users/Model.py @@ -5,23 +5,40 @@ import DB.dbLink as db class User: """Modèle utilisateur. Contient un objet utilisateur""" - def __init__(self, id): - """Constructeur créant utilisateur à partir d'un ID""" - self.identifiant = id - self.roles = list(); + def __init__(self, id='', nom='', prenom='', identifiant='', mdp='', cout='', idfonc='', fonction='', pole='', roles=dict()): + """Constructeur initialisant utilisateur à partir d'un ID ou des données indiquées""" - #On va chercher l'user en base de données - link = db.DBLink() - query = "SELECT u.IDUtil AS id_bdd, u.Nom AS nom, u.Prénom AS prenom, u.Identifiant AS identifiant, u.MdP AS mdp, u.SalaireBrut AS cout, u.IDFonc AS id_fonc, f.Intitulé AS fonction, p.Libelle AS pole \ - FROM utilisateur AS u \ - JOIN fonction AS f ON f.IDFonc = u.IDFonc \ - JOIN pole AS p ON p.IDPole = p.IDPole \ - WHERE u.identifiant = %s" - result = link.query(query, [self.identifiant, ]) + #On load l'user depuis la BDD si demandé avec un ID + if id != '': + self._id_table = id + #On va chercher l'user en base de données + link = db.DBLink() + query = "SELECT u.IDUtil AS id_bdd, u.Nom AS nom, u.Prénom AS prenom, u.Identifiant AS identifiant, u.MdP AS mdp, u.SalaireBrut AS cout, u.IDFonc AS id_fonc, f.Intitulé AS fonction, p.Libelle AS pole \ + FROM utilisateur AS u \ + JOIN fonction AS f ON f.IDFonc = u.IDFonc \ + JOIN pole AS p ON p.IDPole = p.IDPole \ + WHERE u.IDUtil = %s" + result = link.query(query, [self._id_table, ]) - #On remplit l'objet à partir des éléments récupérés en BDD - for id_bdd, nom, prenom, identifiant, mdp, cout, id_fonc, fonction, pole in result: - self._id_table = id_bdd + #On hydrate l'objet à partir des éléments récupérés en BDD + for id_bdd, nom, prenom, identifiant, mdp, cout, id_fonc, fonction, pole in result: + self._id_table = id_bdd + self.fonction = fonction + self.pole = pole + self.nom = nom + self.prenom = prenom + self.identifiant = identifiant + self._mdp = mdp + self.cout = cout + self.id_fonc = id_fonc + + #Récupération de la liste des roles + self.roles = dict() + self.get_roles() + + #Sinon, on hydrate à partir des champs renseignés en paramètre + else : + self.id_fonc = idfonc self.fonction = fonction self.pole = pole self.nom = nom @@ -29,31 +46,26 @@ class User: self.identifiant = identifiant self._mdp = mdp self.cout = cout - self.id_fonc = id_fonc - - #Récupération de la liste des roles - self.getRoles() - - - def hydrate(self, nom, prenom, identifiant, mdp, cout, idfonc, fonction, pole): - """Hydratation de l'objet""" - self.id_fonc = idfonc - self.fonction = fonction - self.pole = pole - self.nom = nom - self.prenom = prenom - self.identifiant = identifiant - self._mdp = mdp - self.cout = cout + self.roles = roles def register(self): """Enregistrement de l'utilisateur""" link = db.DBLink() + #Enregistrement des données utilisateur query = "INSERT INTO utilisateur \ (IDFonc, Nom, Prénom, Identifiant, MdP, SalaireBrut) \ VALUES (%s, %s, %s, %s, %s, %s)" link.commit(query, [self.id_fonc, self.nom, self.prenom, self.identifiant, self._mdp, self.cout]) + #Chargement de l'id ainsi créé + query = "SELECT IDUtil \ + FROM utilisateur \ + WHERE identifiant = %s" + result = link.query(query, [self.identifiant, ]) + for IDUtil, in result: + self._id_table = IDUtil + #Enregistrement des roles + self.update_roles() def update(self): """Mise à jour de l'utilisateur""" @@ -66,18 +78,19 @@ class User: def delete(self): """supprimer l'utilisateur courant""" link = db.DBLink() - query = "DELETE \ - FROM utilisateur \ - WHERE IDUtil = %s" - link.commit(query, [self._id_table, ]) query = "DELETE \ FROM roleattribution \ WHERE IDUtil = %s" link.commit(query, [self._id_table, ]) + query = "DELETE \ + FROM utilisateur \ + WHERE IDUtil = %s" + link.commit(query, [self._id_table, ]) - def getRoles(self): + + def get_roles(self): """liste des roles de l'utilisateur""" link = db.DBLink() query = "SELECT a.IDRole AS id_role, r.Libellé AS role \ @@ -87,4 +100,21 @@ class User: result = link.query(query, [self._id_table, ]) for id_role, role in result: - self.roles.append((id_role, role)) + self.roles[role] = id_role + + def update_roles(self): + """enregistrement/mise à jour des roles de l'uitlisateur""" + link = db.DBLink() + + #On commence par supprimer les roles actuels s'ils existent + query = "DELETE \ + FROM roleattribution \ + WHERE IDUtil = %s" + link.commit(query, [self._id_table, ]) + + #Puis on enregistre les nouveaux + for rol_id in self.roles.values(): + query = "INSERT INTO roleattribution \ + (IDUtil, IDRole) \ + VALUES(%s, %s)" + link.commit(query, [self._id_table, rol_id]) diff --git a/main.py b/main.py index a9cde58..17aa4c5 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ login.fenetre.mainloop() #On lance le programme while auth.Auth.access == True: print("programme en cours") - user = U.User(auth.Auth.current_user) + user = U.User(auth.Auth.current_user_id) print("Bonjour", user.nom, user.prenom, "vous êtes dans la boucle") os.system("pause")