Add user edit functionality
This commit is contained in:
Binary file not shown.
@@ -182,6 +182,7 @@ from pathlib import Path
|
||||
from tools.load_css import load_css
|
||||
from app_db.app_db import get_list, send_cmd
|
||||
from ui.selectboxes import get_roles, get_id
|
||||
import bcrypt
|
||||
|
||||
|
||||
DASH_NAME = Path(__file__).stem # Hier muss die dash_id aus der DB stehen -> 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()
|
||||
|
||||
Reference in New Issue
Block a user