Add role management
This commit is contained in:
@@ -59,7 +59,7 @@ def dialog_create_group(group_id):
|
||||
# Dialog Gruppe bearbeiten
|
||||
#-------------------------------------------------------------------------------------
|
||||
|
||||
@st.dialog("Benutzer bearbeiten")
|
||||
@st.dialog("Gruppe bearbeiten")
|
||||
def dialog_edit_group(group_id):
|
||||
if group_id == None:
|
||||
st.write("keine Gruppe ausgewählt")
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
import streamlit as st
|
||||
from auth_runtime import require_login
|
||||
# from ui.sidebar import build_sidebar
|
||||
from pathlib import Path
|
||||
from tools.load_css import load_css
|
||||
from app_db.app_db import get_list, send_cmd
|
||||
from tools.numgen import get_num, update_num
|
||||
|
||||
|
||||
DASH_NAME = Path(__file__).stem
|
||||
|
||||
load_css()
|
||||
|
||||
st.set_page_config(page_title="Co-App Benutzer", page_icon=":material/person:", layout="wide", initial_sidebar_state="collapsed")
|
||||
|
||||
authenticator = require_login()
|
||||
st.session_state["authenticator"] = authenticator
|
||||
|
||||
def sidebar():
|
||||
|
||||
fullname = st.session_state.get("fullname")
|
||||
role_text = st.session_state.get("role_text")
|
||||
|
||||
with st.sidebar:
|
||||
|
||||
st.logo("app/images/GMN_Logo_neu_rgb.png", size="small")
|
||||
st.markdown(f"**{fullname}** ({role_text})")
|
||||
|
||||
col1, col2 = st.columns([2,2])
|
||||
with col1:
|
||||
authenticator.logout("Logout")
|
||||
with col2:
|
||||
if st.button("Home", use_container_width=True, icon=":material/home:"):
|
||||
st.switch_page("pages/home.py")
|
||||
|
||||
roles()
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------------
|
||||
# Dialog Rollen anlegen
|
||||
#-------------------------------------------------------------------------------------
|
||||
|
||||
@st.dialog("Rolle anlegen")
|
||||
def dialog_create_role(role_id):
|
||||
txt_role_id = st.text_input("RoleId", value=role_id, disabled=True)
|
||||
txt_role_text = st.text_input("Gruppenbezeichnung")
|
||||
txt_description = st.text_area("Beschreibung")
|
||||
txt_order_no = st.text_input("Reihenfolge")
|
||||
if st.button("Save"):
|
||||
if send_cmd(f"insert into roles (role_id, role_text, role_description, order_no) " \
|
||||
"values (?, ?, ?, ?)",(txt_role_id, txt_role_text, txt_description, txt_order_no)):
|
||||
st.session_state.save_msg = f"✅ Rolle '{txt_role_text}' erfolgreich gespeichert"
|
||||
update_num(role_id,1,"numgen_role")
|
||||
else:
|
||||
st.session_state.save_msg = "❌ Fehler beim Speichern"
|
||||
st.rerun()
|
||||
|
||||
#-------------------------------------------------------------------------------------
|
||||
# Dialog Rollen bearbeiten
|
||||
#-------------------------------------------------------------------------------------
|
||||
|
||||
@st.dialog("Rolle bearbeiten")
|
||||
def dialog_edit_role(role_id):
|
||||
if role_id == None:
|
||||
st.write("keine Rolle ausgewählt")
|
||||
else:
|
||||
sql = """
|
||||
select
|
||||
role_id,
|
||||
role_text,
|
||||
role_description,
|
||||
active,
|
||||
order_no
|
||||
from
|
||||
roles
|
||||
where
|
||||
role_id = ?
|
||||
order by
|
||||
order_no
|
||||
"""
|
||||
df = get_list(sql,(role_id,))
|
||||
|
||||
|
||||
col1, col2 = st.columns([2,1],vertical_alignment="center")
|
||||
with col1:
|
||||
txt_role_text = st.text_input(label="Rollenbezeichnung", value=df.iloc[0]["role_text"])
|
||||
with col2:
|
||||
is_active = st.checkbox(label="Aktiv", value=df.iloc[0]["active"])
|
||||
txt_role_description = st.text_area(label="Beschreibung", value=df.iloc[0]["role_description"])
|
||||
txt_oder_no = st.text_input(label="Reihenfolge", value=df.iloc[0]["order_no"])
|
||||
|
||||
if st.button("Save"):
|
||||
sql = """
|
||||
update roles set
|
||||
role_text = ?,
|
||||
active = ?,
|
||||
role_description = ?,
|
||||
order_no = ?
|
||||
where role_id = ?
|
||||
"""
|
||||
params = (txt_role_text, is_active, txt_role_description, txt_oder_no, role_id)
|
||||
|
||||
if send_cmd(sql, params):
|
||||
st.session_state.save_msg = f"✅ Rolle '{txt_role_text}' erfolgreich geändert"
|
||||
else:
|
||||
st.session_state.save_msg = "❌ Fehler beim Speichern"
|
||||
st.rerun()
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------------
|
||||
# Dialog Rollen löschen
|
||||
#-------------------------------------------------------------------------------------
|
||||
|
||||
@st.dialog("Rolle löschen")
|
||||
def dialog_delete_role(role_id):
|
||||
if role_id == None:
|
||||
st.write("keine Rolle ausgewählt")
|
||||
else:
|
||||
df = get_list("select role_text from roles where role_id = ?",(role_id,))
|
||||
role_text = df.iloc[0]["role_text"]
|
||||
st.write(f"Die Rolle {role_text} wird gelöscht! Sind Sie sicher?")
|
||||
if st.button("Löschen"):
|
||||
if send_cmd("delete from roles where role_id = ?",(role_id,)):
|
||||
st.session_state.delete_msg = f"✅ Rolle '{role_text}' erfolgreich gelöscht!"
|
||||
else:
|
||||
st.session_state.delete_msg = f"❌ Rolle '{role_text}' konnte nicht gelöscht werden!"
|
||||
st.rerun()
|
||||
|
||||
|
||||
def roles():
|
||||
|
||||
if "selected_role_id" not in st.session_state:
|
||||
st.session_state.selected_role_id = None
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
# Rollenverwaltung
|
||||
#--------------------------------------------------------------------------------------------------
|
||||
|
||||
df = get_list("""
|
||||
select
|
||||
role_id,
|
||||
role_text,
|
||||
role_description,
|
||||
active,
|
||||
order_no
|
||||
from
|
||||
roles
|
||||
order by
|
||||
order_no
|
||||
""")
|
||||
|
||||
|
||||
|
||||
col_find_role, col_create_role, col_edit_role, col_delete_role = st.columns([3,2,2,2], vertical_alignment="bottom")
|
||||
|
||||
with col_find_role:
|
||||
txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Rolle", icon=":material/search:")
|
||||
|
||||
with col_create_role:
|
||||
if st.button(label="Rolle anlegen", use_container_width=True, icon=":material/add:"):
|
||||
dialog_create_role(get_num("numgen_role"))
|
||||
if "save_msg" in st.session_state:
|
||||
st.toast(st.session_state.save_msg)
|
||||
del st.session_state.save_msg
|
||||
|
||||
with col_edit_role:
|
||||
if st.button(label="Rolle bearbeiten", use_container_width=True, icon=":material/edit:"):
|
||||
if not st.session_state.selected_role_id is None:
|
||||
dialog_edit_role(st.session_state.selected_role_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_role:
|
||||
if st.button(label="Rolle löschen", use_container_width=True, icon=":material/delete:"):
|
||||
if not st.session_state.selected_role_id is None:
|
||||
dialog_delete_role(st.session_state.selected_role_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
|
||||
|
||||
|
||||
|
||||
|
||||
if txt_search.strip():
|
||||
txt_search_norm = txt_search.strip().lower()
|
||||
mask = (
|
||||
df["role_text"].fillna("").str.lower().str.contains(txt_search_norm)
|
||||
)
|
||||
df_view = df.loc[mask].copy()
|
||||
else:
|
||||
df_view = df.copy()
|
||||
|
||||
event = st.dataframe(df_view, key="role_data", on_select="rerun", selection_mode="single-row", height="auto")
|
||||
rows = event.selection.rows
|
||||
if rows:
|
||||
row_idx = rows[0]
|
||||
st.session_state.selected_role_id = int(df_view.iloc[row_idx]["role_id"])
|
||||
else:
|
||||
st.session_state.selected_role_id = None
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sidebar()
|
||||
|
||||
Reference in New Issue
Block a user