# SECURITY-NATIVE-003 — Isolation des données

## Règles natives

1. L'organisation de l'utilisateur est fixée lors de l'authentification.
2. Elle est revérifiée à chaque requête privée avec la fiche utilisateur en base.
3. Toute divergence invalide immédiatement la session.
4. `TenantContext::id()` est l'unique source de l'organisation active.
5. `OrganizationGuard::requireOwnedRecord()` doit précéder toute consultation, modification, suppression ou téléchargement par identifiant.
6. Une ressource d'une autre organisation répond toujours 404, afin de ne pas révéler son existence.
7. Les relations parent/enfant doivent être vérifiées par `OrganizationGuard::requireRelation()`.
8. Les écritures doivent utiliser `OrganizationGuard::scopedValues()` ou injecter explicitement `TenantContext::id()`.
9. Aucun `organisation_id` venant de GET/POST/JSON ne doit être accepté comme source d'autorité.
10. Le scanner `php tools/audit_tenant_isolation.php` fait partie du contrôle préalable des futurs développements.

## Exemple

```php
$client = OrganizationGuard::requireOwnedRecord('clients', (int)($_GET['id'] ?? 0));
```

Même si l'identifiant existe dans une autre organisation, aucune donnée n'est retournée.
