From 0143d9579bdc2cdebaf9a2c92169c3372359ccdb Mon Sep 17 00:00:00 2001 From: knedlik Date: Tue, 16 Dec 2025 08:53:36 +0100 Subject: [PATCH] Add user edit functionality --- app/app_db/app.db | Bin 69632 -> 69632 bytes app/pages/user.py | 94 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 28 deletions(-) diff --git a/app/app_db/app.db b/app/app_db/app.db index d98c97bb1e1061b3956b49d926833c2f1b94096e..6dec818bb610622bd8106abb86d0f08ba1e221fc 100644 GIT binary patch delta 374 zcmZozz|ydQWr8$g`$QRM#`cW~%k;%M82CB(8~9py|MPb6yyhw9{>9zFEwx!u;2+m! zDeF9@`chsV24m4iRzX!!Q4UTc10z#iLnB>7Qw0N4D^n9I6N8e};u003Bo#v=6?cQ; zis0n3663-!j}WsGJ?}^((~49tw*VKjB(rq?Dxa`WOS5plP?zxZ?ELIV3xgQTJ<78yvNBw~@_kK8+yY9?3qztz zBm7;Bi!$>=Omd71f?e|+ea(~1a$Sn_6MapBDuR3~3pXd(sWGzf8;VO#?y*-)&hXOH z&x(kuDlW`Pb&PN+EX;EXODc6rjSMgjb9Q$Q%#C!(b9zFEwx!u;2+m! zDeF9@dIk_E;N@X37Hwn|6cv}`$s@fyu{ wird gegen die session_state geprüft (User-Berechtigung) @@ -266,9 +267,10 @@ def dialog_modify_user(id): sql = """ select u.id, - u.username, + u.username as user, -- ACHTUNG: nicht mit username arbeiten, da Überschneidung in sessionstate!! u.firstname, u.lastname, + u.email, u.role_id || ' | ' || r.role_text as role, r.role_text, u.new_pwd, @@ -284,7 +286,7 @@ def dialog_modify_user(id): # df = get_list("select username from users where id = ?",(id,)) - st.session_state.orig_user_data = df + # st.session_state.orig_user_data = df df_roles = get_roles() @@ -295,27 +297,52 @@ def dialog_modify_user(id): except: idx = None - txt_username = st.text_input("Benutzername", value=df.iloc[0]["username"]) - txt_firstname = st.text_input("Vorname",df.iloc[0]["firstname"]) - txt_lastname = st.text_input("Nachname",df.iloc[0]["username"]) - txt_email = st.text_input("Email", df.iloc[0]["username"]) - txt_pwd = st.text_input("Passwort", placeholder="Neues Passwort eingeben", type="password") - new_pwd = st.checkbox("Neues Passwort",df.iloc[0]["new_pwd"]) - cmb_role = st.selectbox("Rolle", roles, placeholder="Rolle auswählen", index=idx) + txt_username = st.text_input(label="Benutzername", value=df.iloc[0]["user"]) + txt_firstname = st.text_input(label="Vorname", value=df.iloc[0]["firstname"]) + txt_lastname = st.text_input(label="Nachname", value=df.iloc[0]["lastname"]) + txt_email = st.text_input(label="Email", value=df.iloc[0]["email"]) + txt_pwd = st.text_input(label="Passwort", placeholder="Neues Passwort eingeben", type="password") + new_pwd = st.checkbox(label="Neues Passwort", value=df.iloc[0]["new_pwd"]) + cmb_role = st.selectbox(label="Rolle", options=roles, placeholder="Rolle auswählen", index=idx) + + + if st.button("Save"): + pw_hash = bcrypt.hashpw(txt_pwd.encode("utf-8"), bcrypt.gensalt()).decode("utf-8") + + if txt_pwd and txt_pwd.strip(): + sql = """ + update users set + username = ?, + firstname = ?, + lastname = ?, + email = ?, + password_hash = ?, + new_pwd = ?, + role_id = ? + where id = ? + """ + params = (txt_username, txt_firstname, txt_lastname, txt_email, pw_hash, new_pwd, get_id(cmb_role), id) + # send_cmd(sql,(txt_username, txt_firstname, txt_lastname, txt_email, pw_hash, new_pwd, get_id(cmb_role), id)) + else: + sql = """ + update users set + username = ?, + firstname = ?, + lastname = ?, + email = ?, + new_pwd = ?, + role_id = ? + where id = ? + """ + params = (txt_username, txt_firstname, txt_lastname, txt_email, new_pwd, get_id(cmb_role), id) + # send_cmd(sql,(txt_username, txt_firstname, txt_lastname, txt_email, new_pwd, get_id(cmb_role), id)) + print (params) + if send_cmd(sql, params): + st.session_state.save_msg = f"✅ Benutzer '{txt_username}' erfolgreich geändert" + else: + st.session_state.save_msg = "❌ Fehler beim Speichern" + st.rerun() - # if st.button("Save"): - # if create_user( - # username=txt_username, - # firstname=txt_firstname, - # lastname=txt_lastname, - # email=txt_email, - # role_id=get_id(cmb_role), - # password=txt_pwd - # ): - # st.session_state.save_msg = f"✅ Benutzer '{txt_username}' erfolgreich gespeichert" - # else: - # st.session_state.save_msg = "❌ Fehler beim Speichern" - # st.rerun() def user(): @@ -353,7 +380,7 @@ def user(): col_find_user, col_create_user, col_modify_user, col_delete_user = st.columns([3,2,2,2], vertical_alignment="bottom") with col_find_user: - txt_search = st.text_input("", placeholder="Benutzer, Vorname, ...", icon=":material/search:") + txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") with col_create_user: if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"): @@ -364,11 +391,20 @@ def user(): with col_modify_user: if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): - dialog_modify_user(st.session_state.selected_user_id) - + if not st.session_state.selected_user_id is None: + dialog_modify_user(st.session_state.selected_user_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") + if "save_msg" in st.session_state: + st.toast(st.session_state.save_msg) + del st.session_state.save_msg + with col_delete_user: if st.button(label="Benutzer löschen", use_container_width=True, icon=":material/person_remove:"): - dialog_delete_user(st.session_state.selected_user_id) + if not st.session_state.selected_user_id is None: + dialog_delete_user(st.session_state.selected_user_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") if "delete_msg" in st.session_state: st.toast(st.session_state.delete_msg) del st.session_state.delete_msg @@ -379,8 +415,10 @@ def user(): if txt_search.strip(): txt_search_norm = txt_search.strip().lower() mask = ( - df["username"].fillna("").str.lower().str.contains(txt_search_norm)) - + df["username"].fillna("").str.lower().str.contains(txt_search_norm) + | df["firstname"].fillna("").str.lower().str.contains(txt_search_norm) + | df["lastname"].fillna("").str.lower().str.contains(txt_search_norm) + ) df_view = df.loc[mask].copy() else: df_view = df.copy()