From b986763b6c63b48db1f40713e74b71744c962d41 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Tue, 12 Aug 2025 08:59:38 +0000 Subject: [PATCH] Restrict employees from creating tasks and adjust other permissions Update role permissions to prevent employees from creating tasks, while ensuring they can view tasks and suppliers. Adjustments also made to director and manager permissions for product validation. 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/69xEJ3P --- PRODUCTION-FIXES-FINAL.md | 121 ++++++++++++++++++++++++++++ apply-production-fixes.js | 2 +- production-patch-employee-403.patch | 3 +- shared/permissions.ts | 4 +- 4 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 PRODUCTION-FIXES-FINAL.md diff --git a/PRODUCTION-FIXES-FINAL.md b/PRODUCTION-FIXES-FINAL.md new file mode 100644 index 0000000..8e56783 --- /dev/null +++ b/PRODUCTION-FIXES-FINAL.md @@ -0,0 +1,121 @@ +# CORRECTIONS FINALES POUR SERVEUR DE PRODUCTION +# Erreurs 403 Employés - Version Corrigée + +## ⚠️ CLARIFICATION IMPORTANTE +**Les employés ne doivent PAS créer de tâches, seulement les voir** + +## CORRECTIONS À APPLIQUER SUR VOTRE SERVEUR PRIVÉ + +### 1️⃣ FICHIER: server/routes.ts SEULEMENT +**Les permissions dans shared/permissions.ts restent inchangées** + +#### A) Route GET /api/suppliers (environ ligne 188-194): +```typescript +// REMPLACER: +if (!user || (user.role !== 'admin' && user.role !== 'manager')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} + +// PAR: +if (!user || (user.role !== 'admin' && user.role !== 'manager' && user.role !== 'directeur' && user.role !== 'employee')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} +``` + +#### B) Route POST /api/suppliers (environ ligne 240-242): +```typescript +// REMPLACER: +if (user.role !== 'admin' && user.role !== 'manager') { + console.error('❌ Insufficient permissions:', { userRole: user.role, required: ['admin', 'manager'] }); + return res.status(403).json({ message: "Insufficient permissions" }); +} + +// PAR: +if (user.role !== 'admin' && user.role !== 'manager' && user.role !== 'directeur') { + console.error('❌ Insufficient permissions:', { userRole: user.role, required: ['admin', 'manager', 'directeur'] }); + return res.status(403).json({ message: "Insufficient permissions" }); +} +``` + +#### C) Route PUT /api/suppliers/:id (environ ligne 281-283): +```typescript +// REMPLACER: +if (!user || (user.role !== 'admin' && user.role !== 'manager')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} + +// PAR: +if (!user || (user.role !== 'admin' && user.role !== 'manager' && user.role !== 'directeur')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} +``` + +#### D) Route DELETE /api/suppliers/:id (environ ligne 298-300): +```typescript +// REMPLACER: +if (!user || (user.role !== 'admin' && user.role !== 'manager')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} + +// PAR: +if (!user || (user.role !== 'admin' && user.role !== 'directeur')) { + return res.status(403).json({ message: "Insufficient permissions" }); +} +``` + +#### E) Route POST /api/dlc-products/:id/validate (environ ligne 2332-2334): +```typescript +// REMPLACER: +if (!user || !['admin', 'manager'].includes(user.role)) { + return res.status(403).json({ message: "Insufficient permissions to validate products" }); +} + +// PAR: +if (!user || !['admin', 'manager', 'directeur'].includes(user.role)) { + return res.status(403).json({ message: "Insufficient permissions to validate products" }); +} +``` + +## 📋 ÉTAPES D'APPLICATION SIMPLIFIÉES + +1. **Sauvegarde** (sur votre serveur de production): +```bash +cp server/routes.ts server/routes.ts.backup +``` + +2. **Modification**: Ouvrez `server/routes.ts` et effectuez les 5 corrections ci-dessus + +3. **Redémarrage**: Redémarrez votre serveur Node.js + +4. **Test**: Testez avec un compte employé + +## ✅ RÉSULTAT ATTENDU + +- ✅ Employés peuvent voir les fournisseurs (modules Commandes Client et DLC) +- ✅ Employés peuvent voir la page tâches et les tâches existantes +- ❌ Employés ne peuvent PAS créer de tâches (comportement inchangé) +- ✅ Directeurs peuvent valider les produits DLC +- ✅ Plus d'erreurs 403 sur les actions autorisées + +## 🔍 PERMISSIONS FINALES PAR RÔLE + +### Employés: +- **Fournisseurs**: Lecture seulement +- **Tâches**: Lecture seulement (voir page et tâches) +- **Commandes Client**: Voir + Créer +- **DLC**: Voir + Créer + +### Problème Résolu: +Les erreurs 403 venaient principalement des restrictions d'accès aux **fournisseurs**, pas des tâches. Les employés ont besoin de voir les fournisseurs pour créer des commandes client et des produits DLC. + +## 🧪 COMMANDE DE TEST POST-CORRECTION + +```bash +# Test accès fournisseurs pour employé (doit fonctionner): +curl -X GET "https://votre-serveur.com/api/suppliers" \ + -H "Cookie: session=TOKEN_SESSION_EMPLOYE" + +# Résultat attendu: HTTP 200 avec liste des fournisseurs +``` + +**Note**: Les permissions des tâches restent inchangées - les employés peuvent seulement voir les tâches, pas les créer. \ No newline at end of file diff --git a/apply-production-fixes.js b/apply-production-fixes.js index 8dd93ab..64a86b9 100644 --- a/apply-production-fixes.js +++ b/apply-production-fixes.js @@ -27,7 +27,7 @@ console.log('tasks: {'); console.log(' admin: [\'view\', \'create\', \'edit\', \'delete\', \'validate\'],'); console.log(' directeur: [\'view\', \'create\', \'edit\', \'delete\', \'validate\'],'); console.log(' manager: [\'view\', \'validate\'],'); -console.log(' employee: [\'view\', \'create\'] // ← CORRECTION'); +console.log(' employee: [\'view\'] // ← PERMISSIONS INCHANGÉES - VOIR SEULEMENT'); console.log('}'); console.log('\n'); diff --git a/production-patch-employee-403.patch b/production-patch-employee-403.patch index 32184ac..67aca74 100644 --- a/production-patch-employee-403.patch +++ b/production-patch-employee-403.patch @@ -7,8 +7,7 @@ index 1234567..abcdefg 100644 admin: ['view', 'create', 'edit', 'delete', 'validate'], directeur: ['view', 'create', 'edit', 'delete', 'validate'], manager: ['view', 'validate'], -- employee: ['view'] -+ employee: ['view', 'create'] + employee: ['view'] // PAS DE CHANGEMENT - VOIR SEULEMENT } }; diff --git a/shared/permissions.ts b/shared/permissions.ts index af80e47..c2192f7 100644 --- a/shared/permissions.ts +++ b/shared/permissions.ts @@ -80,12 +80,12 @@ const PERMISSIONS: Record> = { employee: ['view', 'create'] }, - // Tâches - Admin/Directeur tout, Manager view + validate, Employé view + create + // Tâches - Admin/Directeur tout, Manager view + validate, Employé view seulement tasks: { admin: ['view', 'create', 'edit', 'delete', 'validate'], directeur: ['view', 'create', 'edit', 'delete', 'validate'], manager: ['view', 'validate'], - employee: ['view', 'create'] + employee: ['view'] } };