mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-14 02:38:58 +02:00
Fixes a bug where directors could see all stores, ensuring they only have access to their designated locations. This involves updating API endpoints for groups, orders, and deliveries to correctly filter by user-assigned groups for non-admin roles. Replit-Commit-Author: Agent Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/Kett7jr
3.8 KiB
3.8 KiB
Fix Urgent - Permissions Directeurs
🎯 Problème Identifié
Les directeurs voient TOUS les magasins au lieu de seulement leur magasin assigné.
🔍 Analyse du Problème
Logique Incorrecte Actuelle
// ❌ INCORRECT
if (user.role === 'admin') {
// Voir tous les magasins
} else {
// Tous les autres rôles voient leurs magasins assignés
}
Rôles et Accès Attendus
- Admin : Tous les magasins ✅
- Directeur : Seulement son magasin assigné ❌→✅
- Manager : Seulement son magasin assigné ✅
- Employee : Seulement son magasin assigné ✅
✅ Corrections Appliquées
1. Endpoint Groups (/api/groups)
// Avant
if (user.role === 'admin') {
const groups = await storage.getGroups(); // Tous
} else {
const userGroups = user.userGroups.map(ug => ug.group); // Assignés
}
// Après
if (user.role === 'admin') {
const groups = await storage.getGroups(); // Tous
} else {
// Directeur, Manager, Employee → seulement magasins assignés
const userGroups = (user as any).userGroups?.map((ug: any) => ug.group) || [];
}
2. Endpoint Orders (/api/orders)
// Avant
if (user.role === 'admin') {
orders = await storage.getOrders(groupIds); // Tous ou filtré
} else {
const groupIds = user.userGroups.map(ug => ug.groupId); // Assignés
}
// Après
if (user.role === 'admin') {
orders = await storage.getOrders(groupIds); // Tous ou filtré
} else {
// Directeur, Manager, Employee → seulement groupes assignés
const groupIds = (user as any).userGroups?.map((ug: any) => ug.groupId) || [];
}
3. Endpoint Deliveries (/api/deliveries)
// Déjà corrigé précédemment avec commentaire explicite
if (user.role === 'admin') {
// Admin peut voir tous les magasins
} else {
// For non-admin users (managers, employees, directeurs), only show their assigned stores
const groupIds = (user as any).userGroups?.map((ug: any) => ug.groupId) || [];
}
4. Contrôles d'Accès (tous endpoints)
// Ajout de fallbacks robustes
const userGroupIds = (user as any).userGroups?.map((ug: any) => ug.groupId) || [];
🔒 Logique de Sécurité Corrigée
Accès aux Données
Admin → Tous les magasins (peut sélectionner un magasin spécifique)
├── Groups: Tous
├── Orders: Tous
├── Deliveries: Tous
└── Permissions: Toutes actions
Directeur → SEULEMENT son magasin assigné
├── Groups: Magasin assigné uniquement
├── Orders: Magasin assigné uniquement
├── Deliveries: Magasin assigné uniquement
└── Permissions: Actions limitées selon le rôle
Manager/Employee → SEULEMENT leur magasin assigné
├── Groups: Magasin assigné uniquement
├── Orders: Magasin assigné uniquement
├── Deliveries: Magasin assigné uniquement
└── Permissions: Actions limitées selon le rôle
🧪 Tests de Validation
Test Directeur
- Se connecter avec compte directeur
- Vérifier : Seulement SON magasin visible
- Vérifier : Pas d'accès aux autres magasins
- Tenter : Accéder à une commande d'un autre magasin → 403 Forbidden
Test Admin
- Se connecter avec compte admin
- Vérifier : Tous les magasins visibles
- Vérifier : Sélecteur de magasin fonctionne
- Vérifier : Peut basculer entre magasins
Test Manager/Employee
- Se connecter avec ces rôles
- Vérifier : Seulement leur magasin assigné
- Vérifier : Cohérent avec directeur
📊 Status
- ✅ Endpoint Groups corrigé
- ✅ Endpoint Orders corrigé
- ✅ Endpoint Deliveries déjà corrigé
- ✅ Contrôles d'accès renforcés avec fallbacks
- ✅ Commentaires explicites ajoutés
- 🔄 À tester en production
Les directeurs ne verront maintenant que leur magasin assigné !