Files
leadradar/frontend/views/admin_users.py
T

68 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pandas as pd
import streamlit as st
from api_client import APIClient
def render_admin_users_view(api_client: APIClient):
st.title("🛡️ Gestão de Usuários & Segurança (Admin)")
user_info = st.session_state.get('user', {})
if user_info.get('role') != 'admin':
st.error("🚫 Acesso restrito! Esta página é exclusiva para administradores.")
return
c1, c2 = st.columns([2, 1])
with c1:
st.subheader("👥 Operadores e Administradores")
users = api_client.get_users()
if users:
df_users = pd.DataFrame([
{
'ID': u['id'],
'Nome': u['nome'],
'E-mail': u['email'],
'Perfil': u['role'].upper(),
'Ativo': 'Sim' if u['ativo'] else 'Não',
'Criado em': u['criado_em'][:10] if u.get('criado_em') else ''
}
for u in users
])
st.dataframe(df_users, use_container_width=True, hide_index=True)
st.markdown("### ❌ Excluir Operador")
user_to_delete = st.selectbox(
"Selecione um usuário para remover:",
options=[u for u in users if u['id'] != user_info.get('id')],
format_func=lambda u: f"{u['nome']} ({u['email']}) - {u['role'].upper()}"
)
if user_to_delete:
if st.button(f"🗑️ Confirmar Exclusão de {user_to_delete['nome']}", type="secondary"):
success, msg = api_client.delete_user(user_to_delete['id'])
if success:
st.success(msg)
st.rerun()
else:
st.error(msg)
else:
st.warning("Não foi possível carregar a lista de usuários.")
with c2:
with st.container(border=True):
st.subheader(" Novo Usuário")
nome = st.text_input("Nome Completo", key="add_nome")
email = st.text_input("E-mail", key="add_email")
password = st.text_input("Senha", type="password", key="add_pass")
role = st.selectbox("Perfil de Acesso", ["user", "admin"], format_func=lambda r: "Operador (User)" if r == "user" else "Administrador (Admin)")
if st.button("✨ Criar Usuário", type="primary", use_container_width=True):
if not nome or not email or not password:
st.error("Preencha todos os campos obrigatórios.")
else:
success, msg = api_client.create_user(nome, email, password, role)
if success:
st.success(msg)
st.rerun()
else:
st.error(msg)