fix: partage dirigé — ACL court-circuitée après résolution Partage/ + chemin canonique au token #196
CI / lint (push) Successful in 3m0s
CI / security (push) Failing after 1m38s
CI / test (push) Successful in 4m58s
CI / build (push) Successful in 1m36s
CI / e2e (push) Successful in 19m55s

- le partage EST l'autorisation: plus de 403 'Accès refusé à la vault' pour un
  destinataire sans accès au vault émetteur (api_file, raw, download)
- chemin virtuel canonique Partage/<token>/<nom> — désambiguïse les homonymes,
  fallback par nom conservé
- 'reçu' = partagé_avec contient l'utilisateur: un admin ne voit plus les
  partages des autres comme reçus (fix File not found: Partage/…)
- +3 tests (14 total)
This commit is contained in:
2026-10-10 23:11:12 -04:00
parent de6bde1613
commit 2be0b15bcf
14 changed files with 139 additions and 35 deletions
+9 -1
View File
@@ -1,6 +1,6 @@
# ObsiGate — Roadmap
> **Version :** 2.67.1 | **Dernière mise à jour :** 2026-10-10
> **Version :** 2.67.2 | **Dernière mise à jour :** 2026-10-10
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
> vers les fonctionnalités livrées.
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
@@ -64,6 +64,14 @@
`home-<user>/Partage/<fichier>` → fichier source dans `/api/file`
(+ raw, download) ; validation `path` non-nulle à la création d'un
partage. +2 tests.
- [x] **Itération 4 (2026-10-11)** : le partage dirigé EST l'autorisation —
la résolution `Partage/…` court-circuite l'ACL du vault source (fix
« Accès refusé à la vault … » : le destinataire n'a par définition
pas accès au vault de l'émetteur) ; chemin virtuel canonique
`Partage/<token>/<nom>` (lève l'ambiguïté de fichiers homonymes,
fallback par nom conservé) ; « reçu » = adressé à moi (un admin ne
voit plus les partages d'autres comptes comme reçus — fix 404
« File not found: Partage/… »). +3 tests.
### 194. Dossier personnel par utilisateur (`<racine>/Home/<user>`)
+20
View File
@@ -121,3 +121,23 @@ Décisions :
`/api/shares` en 500).
+2 tests : ouverture applicative du fichier reçu (file + raw), résolution
scopée par utilisateur (home d'autrui → 403).
## Itération 4 — correctifs d'ouverture (2026-10-11)
- **Le partage EST l'autorisation** : après résolution `Partage/…`, l'ACL du
vault source n'est plus appliquée (`elif` dans `/api/file`, raw, download) —
un destinataire sans accès au vault émetteur ouvrait « Accès refusé à la
vault '…' », précisément le cas d'usage du partage. L'appartenance au
partage (vérifiée dans `_resolve_shared_file` via `list_shares(user=…)`)
reste la seule autorisation.
- **Chemin canonique `Partage/<token>/<nom>`** : lève l'ambiguïté de deux
partages homonymes (le token identifie le partage exact). Fallback par nom
conservé pour les liens historiques. Transporté par l'arbre (`data-path`),
la recherche et le dashboard.
- **« Reçu » = adressé à moi** : sidebar `_loadReceivedShares` et dashboard
filtrent désormais `shared_with.includes(me)` — un admin voyant TOUS les
partages (`/api/shares` non scopé pour lui) n'a plus les partages d'autres
comptes dans son dossier Partage (source des « File not found »).
+3 tests : destinataire sans accès au vault source (200), disambiguïsation
par token, home d'autrui (403). 14 tests au total.