|
|
|
@ -14,7 +14,7 @@ class UserController extends GetxController { |
|
|
|
final _userId = 0.obs; |
|
|
|
final _pointDeVenteId = 0.obs; |
|
|
|
final _pointDeVenteDesignation = ''.obs; |
|
|
|
|
|
|
|
|
|
|
|
// Cache service |
|
|
|
final PermissionCacheService _cacheService = PermissionCacheService.instance; |
|
|
|
|
|
|
|
@ -39,17 +39,18 @@ class UserController extends GetxController { |
|
|
|
Future<void> loadUserData() async { |
|
|
|
try { |
|
|
|
final prefs = await SharedPreferences.getInstance(); |
|
|
|
|
|
|
|
|
|
|
|
final storedUsername = prefs.getString('username') ?? ''; |
|
|
|
final storedRole = prefs.getString('role') ?? ''; |
|
|
|
final storedUserId = prefs.getInt('user_id') ?? 0; |
|
|
|
final storedPointDeVenteId = prefs.getInt('point_de_vente_id') ?? 0; |
|
|
|
final storedPointDeVenteDesignation = prefs.getString('point_de_vente_designation') ?? ''; |
|
|
|
|
|
|
|
final storedPointDeVenteDesignation = |
|
|
|
prefs.getString('point_de_vente_designation') ?? ''; |
|
|
|
|
|
|
|
if (storedUsername.isNotEmpty) { |
|
|
|
try { |
|
|
|
Users user = await AppDatabase.instance.getUser(storedUsername); |
|
|
|
|
|
|
|
|
|
|
|
_username.value = user.username; |
|
|
|
_email.value = user.email; |
|
|
|
_name.value = user.name; |
|
|
|
@ -59,14 +60,14 @@ class UserController extends GetxController { |
|
|
|
_userId.value = storedUserId; |
|
|
|
_pointDeVenteId.value = storedPointDeVenteId; |
|
|
|
_pointDeVenteDesignation.value = storedPointDeVenteDesignation; |
|
|
|
|
|
|
|
if (_pointDeVenteDesignation.value.isEmpty && _pointDeVenteId.value > 0) { |
|
|
|
|
|
|
|
if (_pointDeVenteDesignation.value.isEmpty && |
|
|
|
_pointDeVenteId.value > 0) { |
|
|
|
await loadPointDeVenteDesignation(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ✅ Précharger les permissions en arrière-plan (non bloquant) |
|
|
|
_preloadPermissionsInBackground(); |
|
|
|
|
|
|
|
} catch (dbError) { |
|
|
|
print("❌ Erreur BDD, utilisation du fallback: $dbError"); |
|
|
|
_username.value = storedUsername; |
|
|
|
@ -77,7 +78,7 @@ class UserController extends GetxController { |
|
|
|
_userId.value = storedUserId; |
|
|
|
_pointDeVenteId.value = storedPointDeVenteId; |
|
|
|
_pointDeVenteDesignation.value = storedPointDeVenteDesignation; |
|
|
|
|
|
|
|
|
|
|
|
// Précharger quand même |
|
|
|
_preloadPermissionsInBackground(); |
|
|
|
} |
|
|
|
@ -103,15 +104,17 @@ class UserController extends GetxController { |
|
|
|
|
|
|
|
Future<void> loadPointDeVenteDesignation() async { |
|
|
|
if (_pointDeVenteId.value <= 0) return; |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
final pointDeVente = await AppDatabase.instance.getPointDeVenteById(_pointDeVenteId.value); |
|
|
|
final pointDeVente = |
|
|
|
await AppDatabase.instance.getPointDeVenteById(_pointDeVenteId.value); |
|
|
|
if (pointDeVente != null) { |
|
|
|
_pointDeVenteDesignation.value = pointDeVente['nom'] as String; |
|
|
|
await saveUserData(); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
print('❌ Erreur lors du chargement de la désignation du point de vente: $e'); |
|
|
|
print( |
|
|
|
'❌ Erreur lors du chargement de la désignation du point de vente: $e'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -125,14 +128,14 @@ class UserController extends GetxController { |
|
|
|
_password.value = user.password; |
|
|
|
_userId.value = userId; |
|
|
|
_pointDeVenteId.value = user.pointDeVenteId ?? 0; |
|
|
|
|
|
|
|
|
|
|
|
print("✅ Utilisateur mis à jour avec credentials:"); |
|
|
|
print(" Username: ${_username.value}"); |
|
|
|
print(" Role: ${_role.value}"); |
|
|
|
print(" UserID: ${_userId.value}"); |
|
|
|
|
|
|
|
|
|
|
|
saveUserData(); |
|
|
|
|
|
|
|
|
|
|
|
// ✅ Précharger immédiatement les permissions après connexion |
|
|
|
_preloadPermissionsInBackground(); |
|
|
|
} |
|
|
|
@ -144,7 +147,7 @@ class UserController extends GetxController { |
|
|
|
_name.value = user.name; |
|
|
|
_lastname.value = user.lastName; |
|
|
|
_password.value = user.password; |
|
|
|
|
|
|
|
|
|
|
|
saveUserData(); |
|
|
|
_preloadPermissionsInBackground(); |
|
|
|
} |
|
|
|
@ -152,7 +155,7 @@ class UserController extends GetxController { |
|
|
|
Future<void> saveUserData() async { |
|
|
|
try { |
|
|
|
final prefs = await SharedPreferences.getInstance(); |
|
|
|
|
|
|
|
|
|
|
|
await prefs.setString('username', _username.value); |
|
|
|
await prefs.setString('email', _email.value); |
|
|
|
await prefs.setString('role', _role.value); |
|
|
|
@ -160,8 +163,9 @@ class UserController extends GetxController { |
|
|
|
await prefs.setString('lastname', _lastname.value); |
|
|
|
await prefs.setInt('user_id', _userId.value); |
|
|
|
await prefs.setInt('point_de_vente_id', _pointDeVenteId.value); |
|
|
|
await prefs.setString('point_de_vente_designation', _pointDeVenteDesignation.value); |
|
|
|
|
|
|
|
await prefs.setString( |
|
|
|
'point_de_vente_designation', _pointDeVenteDesignation.value); |
|
|
|
|
|
|
|
print("✅ Données sauvegardées avec succès"); |
|
|
|
} catch (e) { |
|
|
|
print('❌ Erreur lors de la sauvegarde: $e'); |
|
|
|
@ -172,10 +176,10 @@ class UserController extends GetxController { |
|
|
|
Future<void> clearUserData() async { |
|
|
|
try { |
|
|
|
final prefs = await SharedPreferences.getInstance(); |
|
|
|
|
|
|
|
|
|
|
|
// ✅ IMPORTANT: Vider le cache de session |
|
|
|
_cacheService.clearAllCache(); |
|
|
|
|
|
|
|
|
|
|
|
// Effacer SharedPreferences |
|
|
|
await prefs.remove('username'); |
|
|
|
await prefs.remove('email'); |
|
|
|
@ -185,7 +189,7 @@ class UserController extends GetxController { |
|
|
|
await prefs.remove('user_id'); |
|
|
|
await prefs.remove('point_de_vente_id'); |
|
|
|
await prefs.remove('point_de_vente_designation'); |
|
|
|
|
|
|
|
|
|
|
|
// Effacer les observables |
|
|
|
_username.value = ''; |
|
|
|
_email.value = ''; |
|
|
|
@ -196,9 +200,8 @@ class UserController extends GetxController { |
|
|
|
_userId.value = 0; |
|
|
|
_pointDeVenteId.value = 0; |
|
|
|
_pointDeVenteDesignation.value = ''; |
|
|
|
|
|
|
|
|
|
|
|
print("✅ Données utilisateur et cache de session vidés"); |
|
|
|
|
|
|
|
} catch (e) { |
|
|
|
print('❌ Erreur lors de l\'effacement: $e'); |
|
|
|
} |
|
|
|
@ -215,28 +218,28 @@ class UserController extends GetxController { |
|
|
|
print('⚠️ Username vide, rechargement...'); |
|
|
|
await loadUserData(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (_username.value.isEmpty) { |
|
|
|
print('❌ Utilisateur non connecté'); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Essayer d'abord le cache |
|
|
|
if (_cacheService.isLoaded) { |
|
|
|
return _cacheService.hasPermission(_username.value, permission, route); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Si pas encore chargé, charger et essayer de nouveau |
|
|
|
print("🔄 Cache non chargé, chargement des permissions..."); |
|
|
|
await _cacheService.loadUserPermissions(_username.value); |
|
|
|
|
|
|
|
|
|
|
|
return _cacheService.hasPermission(_username.value, permission, route); |
|
|
|
|
|
|
|
} catch (e) { |
|
|
|
print('❌ Erreur vérification permission: $e'); |
|
|
|
// Fallback vers la méthode originale en cas d'erreur |
|
|
|
try { |
|
|
|
return await AppDatabase.instance.hasPermission(_username.value, permission, route); |
|
|
|
return await AppDatabase.instance |
|
|
|
.hasPermission(_username.value, permission, route); |
|
|
|
} catch (fallbackError) { |
|
|
|
print('❌ Erreur fallback permission: $fallbackError'); |
|
|
|
return false; |
|
|
|
@ -245,7 +248,8 @@ class UserController extends GetxController { |
|
|
|
} |
|
|
|
|
|
|
|
/// ✅ Vérification de permissions multiples |
|
|
|
Future<bool> hasAnyPermission(List<String> permissionNames, String menuRoute) async { |
|
|
|
Future<bool> hasAnyPermission( |
|
|
|
List<String> permissionNames, String menuRoute) async { |
|
|
|
for (String permissionName in permissionNames) { |
|
|
|
if (await hasPermission(permissionName, menuRoute)) { |
|
|
|
return true; |
|
|
|
@ -286,8 +290,8 @@ class UserController extends GetxController { |
|
|
|
print("IsLoggedIn: $isLoggedIn"); |
|
|
|
print("Cache Ready: $isCacheReady"); |
|
|
|
print("========================"); |
|
|
|
|
|
|
|
|
|
|
|
// Debug du cache |
|
|
|
_cacheService.debugPrintCache(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|