JUL6ART
🇫🇷 FR
Lire

Sécurité

Trois couches d'autorisation, soft-delete par défaut, audit log automatique : sécurisé sans rien à coder.

Modèle de sécurité

Le modèle à trois couches

  1. Feature flag (OrganizationFeature) — kill-switch module-level. Aucune ressource du module n'est servie si l'organisation ne l'a pas activé.
  2. Permission ACL (PermissionCodes) — autorisation fine, par rôle et par utilisateur, posée via #[IsGranted(...)] sur chaque méthode mutante, y compris les bulk-*.
  3. Voter — propriété et scope d'organisation, denyAccessUnlessGranted(Voter::ATTR, $entity) avant chaque mutation entité-par-entité.

Les trois couches sont obligatoires, dans cet ordre. Aucune route n'est mergée si l'une manque.

Soft-delete par défaut

Toutes les entités métier portent SoftDeletableTrait. Une suppression pose deleted_at, le filtre Doctrine soft_delete masque automatiquement les lignes, et un super-admin peut restaurer via une route gardée par ROLE_SUPER_ADMIN. Aucune perte de données silencieuse.

Audit log automatique

L'attribut #[Auditable] sur une entité génère un journal complet (création, mise à jour, suppression, restauration), enrichi de l'acteur et des champs modifiés. Pratique pour la conformité, indispensable pour le diagnostic.

JWT + scoping tenant

L'API utilise des tokens JWT signés. L'en-tête X-ORGANIZATION attribue chaque appel à un tenant, validé par CrossOrgGuard avant tout traitement. Cross-org n'est jamais possible, même par mass-assignment.