mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-17 12:16:56 +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
130 lines
3.8 KiB
Markdown
130 lines
3.8 KiB
Markdown
# 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
|
|
```typescript
|
|
// ❌ 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`)
|
|
```typescript
|
|
// 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`)
|
|
```typescript
|
|
// 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`)
|
|
```typescript
|
|
// 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)
|
|
```typescript
|
|
// 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é !** |