lucianorabelo commited on
Commit
970b449
·
verified ·
1 Parent(s): 2a0c675

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -0
app.py CHANGED
@@ -112,6 +112,7 @@ else:
112
  # OPÇÃO EXCLUSIVA PARA ADMIN
113
  if perfil_usuario == 'admin':
114
  opcoes_menu.append("Gerenciar Usuários")
 
115
 
116
  menu = st.sidebar.radio("Navegação", opcoes_menu)
117
 
@@ -301,5 +302,45 @@ else:
301
 
302
  except Exception as e:
303
  st.error(f"Erro ao processar relatório de acessos: {e}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
 
305
 
 
112
  # OPÇÃO EXCLUSIVA PARA ADMIN
113
  if perfil_usuario == 'admin':
114
  opcoes_menu.append("Gerenciar Usuários")
115
+ opcoes_menu.append("Logs do Sistema")
116
 
117
  menu = st.sidebar.radio("Navegação", opcoes_menu)
118
 
 
302
 
303
  except Exception as e:
304
  st.error(f"Erro ao processar relatório de acessos: {e}")
305
+
306
+ # --- MÓDULO 5: AUDITORIA DE LOGS (APENAS ADMIN) ---
307
+ elif menu == "Logs do Sistema" and perfil_usuario == 'admin':
308
+ st.title("📜 Auditoria e Logs do Sistema")
309
+
310
+ # Seletor de Tipo de Log
311
+ tipo_log = st.selectbox("Selecione o tipo de registro:",
312
+ ["Acessos ao Sistema", "Operações de Usuários"])
313
+
314
+ try:
315
+ conn = get_connection()
316
+
317
+ if tipo_log == "Acessos ao Sistema":
318
+ st.subheader("Histórico de Logins")
319
+ query = "SELECT nome_usuario, email, data_acesso FROM app_logs_acesso ORDER BY data_acesso DESC"
320
+ df_logs = pd.read_sql(query, conn)
321
+
322
+ else:
323
+ st.subheader("Histórico de Alterações Administrativas")
324
+ query = "SELECT nome_executor, operacao, detalhes, data_operacao FROM app_logs_operacoes ORDER BY data_operacao DESC"
325
+ df_logs = pd.read_sql(query, conn)
326
+
327
+ conn.close()
328
+
329
+ if not df_logs.empty:
330
+ # Formatação amigável das datas no Pandas antes de exibir
331
+ col_data = 'data_acesso' if tipo_log == "Acessos ao Sistema" else 'data_operacao'
332
+ df_logs[col_data] = pd.to_datetime(df_logs[col_data]).dt.strftime('%d/%m/%Y %H:%M:%S')
333
+
334
+ st.dataframe(df_logs, use_container_width=True, hide_index=True)
335
+
336
+ # Botão para exportar os logs
337
+ csv = df_logs.to_csv(index=False).encode('utf-8-sig')
338
+ st.download_button(f"📥 Exportar {tipo_log}", csv, f"logs_{tipo_log.lower()}.csv", "text/csv")
339
+ else:
340
+ st.info("Nenhum registro encontrado nesta categoria.")
341
+
342
+ except Exception as e:
343
+ st.error(f"Erro ao carregar logs: {e}")
344
+
345
 
346