added users administration tool
This commit is contained in:
86
app/admin_users.py
Normal file
86
app/admin_users.py
Normal file
@@ -0,0 +1,86 @@
|
||||
# admin_users.py
|
||||
import streamlit as st
|
||||
import pandas as pd
|
||||
from db_users import init_db, list_users, get_user, create_user, update_user, set_password, delete_user
|
||||
|
||||
st.set_page_config(page_title="User Admin", layout="wide")
|
||||
init_db()
|
||||
|
||||
st.title("Benutzerverwaltung")
|
||||
|
||||
# --- Übersicht ---
|
||||
users = list_users()
|
||||
df = pd.DataFrame(users)
|
||||
|
||||
if df.empty:
|
||||
st.info("Noch keine Benutzer vorhanden.")
|
||||
df = pd.DataFrame(columns=["id","username","display_name","email","role","is_active","created_at"])
|
||||
|
||||
st.subheader("Übersicht")
|
||||
st.dataframe(df, use_container_width=True, hide_index=True)
|
||||
|
||||
st.divider()
|
||||
|
||||
colA, colB = st.columns(2, gap="large")
|
||||
|
||||
# --- Neuen Benutzer anlegen ---
|
||||
with colA:
|
||||
st.subheader("Neuen Benutzer anlegen")
|
||||
with st.form("create_user", clear_on_submit=True):
|
||||
username = st.text_input("Username*", max_chars=50)
|
||||
password = st.text_input("Initiales Passwort*", type="password")
|
||||
display_name = st.text_input("Anzeigename")
|
||||
email = st.text_input("E-Mail")
|
||||
role = st.selectbox("Rolle", ["user", "admin"], index=0)
|
||||
is_active = st.checkbox("Aktiv", value=True)
|
||||
submitted = st.form_submit_button("Anlegen")
|
||||
|
||||
if submitted:
|
||||
if not username or not password:
|
||||
st.error("Username und Passwort sind Pflicht.")
|
||||
else:
|
||||
try:
|
||||
create_user(username, password, display_name, email, role, is_active)
|
||||
st.success("Benutzer angelegt.")
|
||||
st.rerun()
|
||||
except Exception as e:
|
||||
st.error(f"Fehler beim Anlegen: {e}")
|
||||
|
||||
# --- Bestehenden Benutzer bearbeiten/löschen ---
|
||||
with colB:
|
||||
st.subheader("Benutzer bearbeiten / löschen")
|
||||
|
||||
user_ids = df["id"].tolist() if "id" in df.columns else []
|
||||
selected_id = st.selectbox("Benutzer wählen", user_ids, format_func=lambda uid: f"{uid} – {df.loc[df.id==uid,'username'].values[0] if len(df)>0 else uid}" if uid in user_ids else str(uid))
|
||||
|
||||
user = get_user(int(selected_id)) if selected_id else None
|
||||
if user:
|
||||
with st.form("edit_user"):
|
||||
display_name2 = st.text_input("Anzeigename", value=user.get("display_name") or "")
|
||||
email2 = st.text_input("E-Mail", value=user.get("email") or "")
|
||||
role2 = st.selectbox("Rolle", ["user", "admin"], index=0 if user["role"]=="user" else 1)
|
||||
is_active2 = st.checkbox("Aktiv", value=bool(user["is_active"]))
|
||||
save = st.form_submit_button("Änderungen speichern")
|
||||
|
||||
if save:
|
||||
update_user(int(selected_id), display_name2, email2, role2, is_active2)
|
||||
st.success("Gespeichert.")
|
||||
st.rerun()
|
||||
|
||||
st.markdown("**Passwort zurücksetzen**")
|
||||
with st.form("reset_pw", clear_on_submit=True):
|
||||
new_pw = st.text_input("Neues Passwort", type="password")
|
||||
reset = st.form_submit_button("Passwort setzen")
|
||||
if reset:
|
||||
if not new_pw:
|
||||
st.error("Bitte ein Passwort eingeben.")
|
||||
else:
|
||||
set_password(int(selected_id), new_pw)
|
||||
st.success("Passwort aktualisiert.")
|
||||
|
||||
st.markdown("**Löschen**")
|
||||
confirm = st.checkbox("Ich möchte diesen Benutzer wirklich löschen.")
|
||||
if st.button("Benutzer löschen", disabled=not confirm):
|
||||
delete_user(int(selected_id))
|
||||
st.success("Benutzer gelöscht.")
|
||||
st.rerun()
|
||||
Reference in New Issue
Block a user