mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-04-06 21:41:42 +02:00
capitalisation: intégrer 12 entrées depuis app-alexandrie et app-template-resto
- backend/risques/nestjs : guard multi-statut READ_METHODS avant statut - backend/patterns/nestjs : fusionner lastSeenAt dans la réconciliation - backend/risques/contracts : pas de process.env dans services/helpers - backend/risques/nextjs : self-request Server Action + EXDEV atomic write - backend/risques/prisma : champ enum-like stocké en String - frontend/risques/general : Alert.prompt iOS-only - frontend/risques/tests : 3 anti-patterns (helpers copiés, test indirect, test façade) - workflow/risques/story-tracking : 2 entrées (hors périmètre, File List approximative) - skill capitalisation-triage : nouveau format de rapport (tableaux par domaine) - 95_a_capitaliser.md : purgé
This commit is contained in:
@@ -100,3 +100,36 @@ throw new HttpException(
|
||||
- Interdire les méthodes "cachées" consommées hors contrat
|
||||
- Tester au moins une implémentation par le contrat abstrait
|
||||
- Contexte technique : TypeScript / provider strategy — 10-03-2026
|
||||
|
||||
---
|
||||
|
||||
<a id="risque-guard-multistatut-read-methods"></a>
|
||||
## Guard multi-statut : ordre READ_METHODS avant statut et whitelist des writes critiques
|
||||
|
||||
### Risques
|
||||
|
||||
- Un guard qui vérifie le statut BLOCKED avant la méthode HTTP bloque aussi les GET, enfermant l'utilisateur sans moyen de sortir (ex : révoquer un appareil).
|
||||
- Sans whitelist explicite des writes autorisés en état bloqué, le circuit de sortie est fermé.
|
||||
|
||||
### Symptômes
|
||||
|
||||
- L'utilisateur avec `sessionStatus === 'BLOCKED'` ne peut pas accéder à `GET /auth/devices`
|
||||
- Tests passent mais l'ordre des conditions est inversé
|
||||
|
||||
### Bonnes pratiques / mitigations
|
||||
|
||||
```typescript
|
||||
// ❌ DANGEREUX — BLOCKED bloque aussi les GET
|
||||
if (user.sessionStatus === 'BLOCKED') throw new HttpException(...);
|
||||
if (READ_METHODS.has(request.method)) return true; // jamais atteint pour BLOCKED
|
||||
|
||||
// ✅ CORRECT
|
||||
if (READ_METHODS.has(request.method)) return true;
|
||||
if (isDeviceManagementPath(request.path)) return true; // whitelist writes critiques
|
||||
if (user.sessionStatus === 'BLOCKED') throw new HttpException(...);
|
||||
```
|
||||
|
||||
- **Règle** : dans tout guard multi-statut, vérifier `READ_METHODS.has(request.method)` EN PREMIER, avant tout check de statut.
|
||||
- **Règle** : définir une whitelist explicite des writes autorisés même en état bloqué.
|
||||
|
||||
- Contexte technique : NestJS / guard statut — app-alexandrie 30-03-2026
|
||||
|
||||
Reference in New Issue
Block a user