Skip to content

Autorisation fr FR

rocambille edited this page Apr 28, 2026 · 1 revision

Résumé : Cette page explique comment centraliser et appliquer des règles d'accès sécurisées (ex: "seul le propriétaire peut modifier") en utilisant les objets req.me et les entités injectées.

Le principe de l'autorisation

L'autorisation intervient après l'authentification. Une fois que l'on sait "qui" est l'utilisateur (req.me), il faut vérifier s'il a le droit d'effectuer l'action demandée sur une ressource précise (ex: req.item).

Centralisation dans les routes

Dans StartER, nous recommandons de placer la logique d'autorisation directement dans le fichier de routes du module (ex: src/express/modules/item/itemRoutes.ts). Cela rend les règles faciles à auditer.

Exemple : vérifier la propriété d'une ressource

const checkAccess: RequestHandler = (req, res, next) => {
  // req.item a été injecté par le param converter
  // req.me a été injecté par verifyAccessToken
  if (req.item.user_id === req.me.id) {
    next(); // L'utilisateur est le propriétaire, on continue
  } else {
    res.sendStatus(403); // Interdit
  }
};

Application fine avec .all()

Pour protéger toutes les méthodes HTTP d'un chemin spécifique, vous pouvez utiliser .all() :

router
  .route("/api/items/:itemId")
  .all(checkAccess) // S'applique à toutes les méthodes ci-dessous
  .put(itemValidator.validate, itemActions.edit)
  .delete(itemActions.destroy);

Le mur d'authentification

Pour éviter de répéter l'appel à verifyAccessToken sur chaque route, vous pouvez définir une frontière de sécurité :

// Routes publiques (lecture seule)
router.get("/api/items", itemActions.browse);
router.get("/api/items/:itemId", itemActions.read);

// --- FRONTIÈRE ---
router.use("/api/items", authActions.verifyAccessToken);

// Routes protégées (écriture)
router.post("/api/items", itemValidator.validate, itemActions.add);

Bonnes pratiques

  1. Explicit over implicit : ne cachez pas l'autorisation trop profondément dans les repositories ou les actions. Elle doit être visible au niveau du routage.
  2. Fail fast : rejetez la requête dès que possible (middleware) avant de commencer à valider les données de la requête.
  3. Utilisez req.me : ne vous basez jamais sur un ID utilisateur envoyé par le client (req.body.user_id) pour vérifier les droits, utilisez toujours l'identité de session req.me.

Voir aussi

Clone this wiki locally