# 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()