def get_one_t_roles(id_role): """ Fonction qui retourne les données concernant un utilisateur """ role = TRoles.get_one(id_role) return role
def membres(id_groupe): """ Route affichant la liste des roles n'appartenant pas au groupe vis à vis de ceux qui appartiennent à celui ci. Avec pour paramètre un id de groupe (id_role) Retourne un template avec pour paramètres: - une entête des tableaux --> fLine - le nom des colonnes de la base --> data - liste des roles n'appartenant pas au groupe --> table - liste des roles appartenant au groupe --> table2 - variable qui permet a jinja de colorer une ligne si celui-ci est un groupe --> group """ users_in_group = TRoles.test_group(TRoles.get_user_in_group(id_groupe)) users_out_group = TRoles.test_group(TRoles.get_user_out_group(id_groupe)) group = TRoles.get_one(id_groupe) header = ['ID', 'Nom'] data = ['id_role', 'full_name'] if request.method == 'POST': data = request.get_json() new_users_in_group = data["tab_add"] new_users_out_group = data["tab_del"] try: CorRoles.add_cor(id_groupe, new_users_in_group) CorRoles.del_cor(id_groupe, new_users_out_group) except Exception as e: return jsonify(str(e)), 500 return jsonify({'redirect': url_for('groupe.groups')}), 200 return render_template("tobelong.html", fLine=header, data=data, table=users_out_group, table2=users_in_group, group='groupe', info="Membres du groupe '" + group['nom_role'] + "'")
def add_or_update_profil_for_role_in_app(id_application, id_role=None): """ add or update un profil sur une application on part du principe qu'un role ne peut avoir qu'un profil dans une application TODO: pour mettre plusieurs profil a un role dans une appli: rajouter une clé primaire a cor_role_app_profil pour gérer l'update """ form = t_applicationsforms.AppProfil(id_application) application = TApplications.get_one(id_application) role = None title = "Ajouter un profil l'application {}".format( application["nom_application"]) if id_role: role = TRoles.get_one(id_role, as_model=True).as_dict_full_name() title = "Editer le profil de {} dans l'application {}".format( role["full_name"], application["nom_application"]) # preremplissage du formulaire profil_in_app = CorRoleAppProfil.get_one(id_role, id_application) form.profil.process_data(profil_in_app.id_profil) form.role.process_data(str(id_role)) # HACK ajout de l'utilisateur courant dans la liste déroulante # sinon le formulaire ne passe pas form.role.choices.append((id_role, role["full_name"])) if request.method == "POST": # set new id__profil form.profil.process_data(request.form["profil"]) if form.validate() and form.validate_on_submit(): try: if id_role: # on supprime d'abbord le profil pour une app CorRoleAppProfil.delete(id_role=id_role, id_application=id_application) # et on post CorRoleAppProfil.post({ "id_role": form.data["role"], "id_profil": form.data["profil"], "id_application": id_application, }) except Exception as e: redirect( url_for( "application.add_or_update_profil_for_role_in_app", id_application=id_application, )) flash("Une erreur s'est produite, {}".format(e), "error") flash("Profil ajouté/edité avec succès") return redirect( url_for("application.profils_in_app", id_application=id_application)) return render_template( "application_role_profil_form.html", title=title, form=form, application=application, id_role=id_role, )
def info(id_role): group = TRoles.get_one(id_role) members = TRoles.get_user_in_group(id_role) lists = TRoles.get_user_lists(id_role) rights = TRoles.get_user_app_profils(id_role) return render_template("info_group.html", group=group, members=members, lists=lists, rights=rights, pathU=config.URL_APPLICATION + '/group/update/')
def info(id_role): user = TRoles.get_one(id_role) organisme = Bib_Organismes.get_one(user['id_organisme']) groups = TRoles.get_user_groups(id_role) lists = TRoles.get_user_lists(id_role) rights = TRoles.get_user_app_profils(id_role) return render_template("info_user.html", user=user, organisme=organisme, groups=groups, lists=lists, rights=rights, pathU=config.URL_APPLICATION + '/user/update/')
def updatepass(id_role=None): """ Route affichant un formulaire permettant de changer le pass des utilisateurs L'envoie du formulaire permet la mise à jour du pass de l'utilisateur dans la base Retourne un template accompagné du formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste des utilisateurs """ form = t_rolesforms.UserPass() myuser = TRoles.get_one(id_role) if request.method == "POST": if form.validate_on_submit() and form.validate(): form_user = pops(form.data, False) form_user.pop("id_role") # check if passwords are the same if form.pass_plus.data: try: ( form_user["pass_plus"], form_user["pass_md5"], ) = check_and_encrypt_password( form.pass_plus.data, form.mdpconf.data, current_app.config["PASS_METHOD"] == "md5" or current_app.config["FILL_MD5_PASS"], ) except Exception as exp: flash({"password": [exp]}, "error") return render_template( "user_pass.html", form=form, title="Changer le mot de passe de l'utilisateur '" + myuser["nom_role"] + " " + myuser["prenom_role"] + "'", id_role=id_role, ) form_user["id_role"] = id_role TRoles.update(form_user) return redirect(url_for("user.users")) else: flash(strigify_dict(form.errors), "error") return render_template( "user_pass.html", form=form, title="Changer le mot de passe de l'utilisateur '" + myuser["nom_role"] + " " + myuser["prenom_role"] + "'", id_role=id_role, )
def updatepass(id_role=None): """ Route affichant un formulaire permettant de changer le pass des utilisateurs L'envoie du formulaire permet la mise à jour du pass de l'utilisateur dans la base Retourne un template accompagné du formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste des utilisateurs """ form = t_rolesforms.UserPass() myuser = TRoles.get_one(id_role) if request.method == 'POST': if form.validate_on_submit() and form.validate(): form_user = pops(form.data, False) form_user.pop('id_role') # check if passwords are the same if form.pass_plus.data: try: (form_user['pass_plus'], form_user['pass_md5']) = TRoles.set_password( form.pass_plus.data, form.mdpconf.data) except Exception as exp: flash({'password': [exp]}, 'error') return render_template( 'user_pass.html', form=form, title="Changer le mot de passe de l'utilisateur '" + myuser['nom_role'] + ' ' + myuser['prenom_role'] + "'", id_role=id_role) form_user['id_role'] = id_role TRoles.update(form_user) return redirect(url_for('user.users')) else: flash(strigify_dict(form.errors), 'error') return render_template('user_pass.html', form=form, title="Changer le mot de passe de l'utilisateur '" + myuser['nom_role'] + ' ' + myuser['prenom_role'] + "'", id_role=id_role)
def addorupdate(id_role=None): """ Route affichant un formulaire vierge ou non (selon l'url) pour ajouter ou mettre à jour un groupe L'envoie du formulaire permet l'ajout ou la maj du groupe dans la base Retourne un template accompagné d'un formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste de groupe """ form = groupeforms.Group() form.groupe.process_data(True) if id_role == None: if request.method == "POST": if form.validate_on_submit() and form.validate(): form_group = pops(form.data) form_group.pop("id_role") # set the group as active default form_group["active"] = True TRoles.post(form_group) return redirect(url_for("groupe.groups")) else: errors = form.errors return render_template("group.html", form=form, title="Formulaire Groupe") else: group = TRoles.get_one(id_role) if request.method == "GET": form = process(form, group) if request.method == "POST": if form.validate_on_submit() and form.validate(): form_group = pops(form.data) form_group["id_role"] = group["id_role"] TRoles.update(form_group) return redirect(url_for("groupe.groups")) else: errors = form.errors flash(strigify_dict(errors), "error") return render_template("group.html", form=form, title="Formulaire Groupe")
def addorupdate(id_role=None): """ Route affichant un formulaire vierge ou non (selon l'url) pour ajouter ou mettre à jour un utilisateurs L'envoie du formulaire permet l'ajout ou la mise à jour de l'utilisateur dans la base Retourne un template accompagné du formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste des utilisateurs """ form = t_rolesforms.Utilisateur() form.id_organisme.choices = Bib_Organismes.choixSelect( 'id_organisme', 'nom_organisme') form.a_groupe.choices = TRoles.choix_group('id_role', 'nom_role', aucun=None) if id_role is not None: user = TRoles.get_one(id_role, as_model=True) user_as_dict = user.as_dict_full_name() # format group to prepfil the form formated_groups = [ group.id_role for group in TRoles.get_user_groups(id_role) ] if request.method == 'GET': form = process(form, user_as_dict, formated_groups) if request.method == 'POST': if form.validate_on_submit() and form.validate(): groups = form.data['a_groupe'] form_user = pops(form.data) form_user['groupe'] = False form_user.pop('id_role') # if a password is set # check they are the same if form.pass_plus.data: try: (form_user['pass_plus'], form_user['pass_md5']) = TRoles.set_password( form.pass_plus.data, form.mdpconf.data) except Exception as exp: flash(str(exp), 'error') return render_template('user.html', form=form, title="Formulaire Utilisateur") if id_role is not None: #HACK a l'update on remet a la main les mdp # car on les masque dans le form form_user['pass_plus'] = user.pass_plus form_user['pass_md5'] = user.pass_md5 form_user['id_role'] = user.id_role new_role = TRoles.update(form_user) else: new_role = TRoles.post(form_user) # set groups if len(groups) > 0: if id_role: #first delete all groups of the user cor_role_to_delete = CorRoles.get_all(params=[{ 'col': 'id_role_utilisateur', 'filter': id_role }], as_model=True) print(cor_role_to_delete) for cor_role in cor_role_to_delete: db.session.delete(cor_role) db.session.commit() for group in groups: # add new groups new_group = CorRoles(id_role_groupe=group, id_role_utilisateur=new_role.id_role) db.session.add(new_group) db.session.commit() return redirect(url_for('user.users')) else: flash(strigify_dict(form.errors), 'error') return render_template('user.html', form=form, title="Formulaire Utilisateur", id_role=id_role)
def addorupdate(id_role=None): """ Route affichant un formulaire vierge ou non (selon l'url) pour ajouter ou mettre à jour un utilisateurs L'envoie du formulaire permet l'ajout ou la mise à jour de l'utilisateur dans la base Retourne un template accompagné du formulaire pré-rempli ou non selon le paramètre id_role Une fois le formulaire validé on retourne une redirection vers la liste des utilisateurs """ form = t_rolesforms.Utilisateur() form.id_organisme.choices = Bib_Organismes.choixSelect( "id_organisme", "nom_organisme", order_by="nom_organisme") form.a_groupe.choices = TRoles.choix_group("id_role", "nom_role", aucun=None) if id_role is not None: user = TRoles.get_one(id_role, as_model=True) user_as_dict = user.as_dict_full_name() # format group to prepfil the form formated_groups = [ group.id_role for group in TRoles.get_user_groups(id_role) ] if request.method == "GET": form = process(form, user_as_dict, formated_groups) if request.method == "POST": if form.validate_on_submit() and form.validate(): groups = form.data["a_groupe"] form_user = pops(form.data) form_user["groupe"] = False form_user.pop("id_role") # if a password is set # check they are the same if form.pass_plus.data: try: ( form_user["pass_plus"], form_user["pass_md5"], ) = check_and_encrypt_password( form.pass_plus.data, form.mdpconf.data, current_app.config["PASS_METHOD"] == "md5" or current_app.config["FILL_MD5_PASS"], ) except Exception as exp: flash(str(exp), "error") return render_template("user.html", form=form, title="Formulaire Utilisateur") if id_role is not None: # HACK a l'update on remet a la main les mdp # car on les masque dans le form form_user["pass_plus"] = user.pass_plus form_user["pass_md5"] = user.pass_md5 form_user["id_role"] = user.id_role new_role = TRoles.update(form_user) else: new_role = TRoles.post(form_user) # set groups if len(groups) > 0: if id_role: # first delete all groups of the user cor_role_to_delete = CorRoles.get_all( params=[{ "col": "id_role_utilisateur", "filter": id_role }], as_model=True, ) for cor_role in cor_role_to_delete: db.session.delete(cor_role) db.session.commit() for group in groups: # add new groups new_group = CorRoles(id_role_groupe=group, id_role_utilisateur=new_role.id_role) db.session.add(new_group) db.session.commit() return redirect(url_for("user.users")) else: flash(strigify_dict(form.errors), "error") return render_template("user.html", form=form, title="Formulaire Utilisateur", id_role=id_role)