Files
LogiFlow/URGENT-PERMISSIONS-FIX.md
T
michaelschal e3f95e3aea Ensure directors only see their assigned stores
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
2025-08-12 11:51:08 +00:00

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

  1. Se connecter avec compte directeur
  2. Vérifier : Seulement SON magasin visible
  3. Vérifier : Pas d'accès aux autres magasins
  4. Tenter : Accéder à une commande d'un autre magasin → 403 Forbidden

Test Admin

  1. Se connecter avec compte admin
  2. Vérifier : Tous les magasins visibles
  3. Vérifier : Sélecteur de magasin fonctionne
  4. Vérifier : Peut basculer entre magasins

Test Manager/Employee

  1. Se connecter avec ces rôles
  2. Vérifier : Seulement leur magasin assigné
  3. 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é !