From d7f7e6a0fdac30ec1834c6b684ed4b59a10b500a Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 23 Jul 2025 15:05:26 +0000 Subject: [PATCH] Provide tools to diagnose user list visibility issue in production Adds a debug script and markdown guide to troubleshoot admin user access problems. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 4b008663-bd72-492b-b0b6-fa252367e730 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/4b008663-bd72-492b-b0b6-fa252367e730/gfGF2TH --- PRODUCTION_ADMIN_DEBUG.md | 110 ++++++++++++++++++++++++++++++++++++++ debug-production-admin.js | 99 +++++++++++++++++++++++++--------- 2 files changed, 183 insertions(+), 26 deletions(-) create mode 100644 PRODUCTION_ADMIN_DEBUG.md diff --git a/PRODUCTION_ADMIN_DEBUG.md b/PRODUCTION_ADMIN_DEBUG.md new file mode 100644 index 0000000..4bc401a --- /dev/null +++ b/PRODUCTION_ADMIN_DEBUG.md @@ -0,0 +1,110 @@ +# DIAGNOSTIC - Problème liste utilisateurs en production + +## 🚨 Problème signalé +La liste des utilisateurs n'apparaît plus dans l'administration en production. + +## ✅ État en développement +- API `/api/admin/users` fonctionne correctement +- Retourne 5 utilisateurs : admin, gael, FFNANCY, ff292, ff579 +- Interface d'administration accessible + +## 🔍 Diagnostic production + +### 1. Vérifier l'utilisateur admin +```bash +docker exec regisflow-regisflow-1 psql -U regisflow -d regisflow -c " +SELECT 'ADMIN ACTUEL:' as info, id, username, role, store_id, is_active +FROM users WHERE username IN ('gael', 'admin') ORDER BY id; +" +``` + +### 2. Tester l'authentification +```bash +# Test de connexion +curl -X POST http://votre-domaine:5000/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{"username":"gael","password":"votre_mot_de_passe"}' \ + -c /tmp/prod_admin.txt + +# Vérifier les infos utilisateur +curl http://votre-domaine:5000/api/auth/me \ + -b /tmp/prod_admin.txt +``` + +### 3. Tester la route admin +```bash +# Test route utilisateurs admin +curl http://votre-domaine:5000/api/admin/users \ + -b /tmp/prod_admin.txt + +# Réponse attendue : JSON array avec les utilisateurs +# Erreur possible : {"error":"Insufficient permissions"} +``` + +### 4. Vérifier les logs d'application +```bash +docker logs regisflow-regisflow-1 --tail 50 | grep -E "(admin|users|403|500)" +``` + +## 🔧 Solutions possibles + +### Solution 1: Problème de permissions utilisateur +```sql +-- Si l'utilisateur gael n'a pas les bons droits +UPDATE users SET role = 'administrator', store_id = NULL WHERE username = 'gael'; +``` + +### Solution 2: Session expirée ou corrompue +```bash +# Redémarrer l'application pour nettoyer les sessions +docker restart regisflow-regisflow-1 +``` + +### Solution 3: Problème de route middleware +- Vérifier que la route `/api/admin/users` utilise `requireRole(['administrator'])` +- S'assurer que `gael` a bien le rôle `administrator` (pas `admin`) + +### Solution 4: Frontend cache/build +```bash +# En cas de problème de cache frontend +docker exec regisflow-regisflow-1 rm -rf /app/dist +docker restart regisflow-regisflow-1 +``` + +## 📊 État attendu après correction + +### Base de données +```sql +-- Utilisateur gael doit avoir : +id | username | role | store_id | is_active +3 | gael | administrator | NULL | true +``` + +### API Response +```json +[ + { + "id": 3, + "username": "gael", + "role": "administrator", + "storeId": null, + "isActive": true, + ... + }, + ... +] +``` + +### Interface +- Liste des utilisateurs visible dans l'onglet Administration +- Possibilité de créer/modifier/supprimer des utilisateurs +- Accès aux autres onglets (Magasins, Sauvegarde, Purge) + +## 🚀 Commande de correction complète +```bash +# Correction en une seule commande +docker exec regisflow-regisflow-1 psql -U regisflow -d regisflow -c " +UPDATE users SET role = 'administrator', store_id = NULL WHERE username = 'gael'; +SELECT 'UTILISATEUR CORRIGÉ:' as status, id, username, role, store_id FROM users WHERE username = 'gael'; +" && docker restart regisflow-regisflow-1 +``` \ No newline at end of file diff --git a/debug-production-admin.js b/debug-production-admin.js index e4baa68..b7cdbe0 100644 --- a/debug-production-admin.js +++ b/debug-production-admin.js @@ -1,30 +1,77 @@ -// Script de debug pour forcer la correction admin en production -const fs = require('fs'); -const path = require('path'); +#!/usr/bin/env node -// Simuler la correction directement dans le code pour production -const fixProductionAdmin = () => { - console.log('=== DEBUG ADMIN PRODUCTION ==='); - console.log('Problème identifié:'); - console.log('- Logs montrent: ID 3, email tronqué "admin@exampl"'); - console.log('- Utilisateur connecté différent entre dev (ID 1) et prod (ID 3)'); - console.log(''); - - console.log('SOLUTIONS à appliquer:'); - console.log('1. Corriger base de données production:'); - console.log(' UPDATE users SET role = \'administrator\' WHERE id = 3;'); - console.log(''); - console.log('2. Ou créer utilisateur admin correct:'); - console.log(' INSERT INTO users (username, password, email, role, store_id) VALUES'); - console.log(' (\'admin\', \'$2b$12$hashed_password\', \'admin@example.com\', \'administrator\', NULL);'); - console.log(''); - - console.log('3. Vérifier les sessions:'); - console.log(' DELETE FROM sessions WHERE data LIKE \'%"id":3%\';'); -}; +/** + * Script de diagnostic pour problème administration production + * Teste les routes d'administration et permissions + */ -if (require.main === module) { - fixProductionAdmin(); +const https = require('https'); +const http = require('http'); + +// Configuration production - remplacez par votre domaine +const PROD_URL = 'your-production-domain.com'; +const PROD_PORT = 5000; + +// Test des routes d'administration +async function testAdminRoutes() { + console.log('🔍 DIAGNOSTIC ADMINISTRATION PRODUCTION'); + console.log('====================================='); + + // 1. Test de connexion auth + console.log('\n1. Test connexion administrateur...'); + try { + const loginData = { + username: 'gael', // ou l'utilisateur admin en production + password: 'your_password' // Remplacez par le bon mot de passe + }; + + console.log('POST /api/auth/login'); + console.log('- Username:', loginData.username); + console.log('- Vérifiez le mot de passe manuellement'); + + } catch (error) { + console.error('❌ Erreur login:', error.message); + } + + // 2. Test route /api/admin/users + console.log('\n2. Test route admin users...'); + console.log('GET /api/admin/users'); + console.log('- Route nécessite role: administrator'); + console.log('- Utilisateur gael doit avoir store_id = NULL'); + + // 3. Test route /api/auth/me + console.log('\n3. Test informations utilisateur...'); + console.log('GET /api/auth/me'); + console.log('- Doit retourner role: administrator'); + console.log('- Doit retourner storeId: null'); + + console.log('\n📋 COMMANDES DE DIAGNOSTIC PRODUCTION:'); + console.log('====================================='); + + console.log('\n# 1. Vérifier l\'état de l\'utilisateur admin:'); + console.log('docker exec regisflow-regisflow-1 psql -U regisflow -d regisflow -c "SELECT id, username, role, store_id FROM users WHERE username = \'gael\';"'); + + console.log('\n# 2. Tester la route d\'administration:'); + console.log('curl -X POST http://votre-domaine:5000/api/auth/login \\'); + console.log(' -H "Content-Type: application/json" \\'); + console.log(' -d \'{"username":"gael","password":"votre_mot_de_passe"}\' \\'); + console.log(' -c /tmp/admin_test.txt'); + + console.log('\ncurl http://votre-domaine:5000/api/admin/users \\'); + console.log(' -b /tmp/admin_test.txt'); + + console.log('\n# 3. Vérifier les logs de l\'application:'); + console.log('docker logs regisflow-regisflow-1 --tail 50'); + + console.log('\n# 4. Si problème de permissions, corriger:'); + console.log('docker exec regisflow-regisflow-1 psql -U regisflow -d regisflow -c "UPDATE users SET role = \'administrator\', store_id = NULL WHERE username = \'gael\';"'); + console.log('docker restart regisflow-regisflow-1'); + + console.log('\n✅ RÉSULTATS ATTENDUS:'); + console.log('- /api/admin/users retourne un tableau JSON des utilisateurs'); + console.log('- Interface d\'administration affiche la liste'); + console.log('- Pas d\'erreur "Insufficient permissions"'); } -module.exports = fixProductionAdmin; \ No newline at end of file +// Exécuter le diagnostic +testAdminRoutes().catch(console.error); \ No newline at end of file