feat: dossier personnel par utilisateur — vault home-<user> + registre de vaults persistant #194
CI / lint (push) Canceled after 0s
CI / test (push) Canceled after 0s
CI / security (push) Canceled after 0s
CI / build (push) Canceled after 0s
CI / e2e (push) Canceled after 0s

- backend/user_home.py : ensure_user_home()/release_user_home() idempotents
  (mkdir, vault, watcher, octroi dans user.vaults), rappelés à la création
  d'un compte et au démarrage (migration + réparation + sweep des vaults
  home-* orphelins), dossier conservé à la suppression.
- backend/indexer.py : data/vaults.json, registre persistant des vaults
  ajoutés à la volée, fusionné par load_vault_config() — ils disparaissaient
  au premier reindex complet et au redémarrage. reload_single_vault remet
  vault_config[name] après remove_vault_from_index.
- backend/auth/router.py + routers/vaults.py : appels ensure/release +
  persistance à l'ajout/retrait d'un vault.
- docker-compose.yml : montage unique /NFS/OBSIDIAN_DOC/Home:/vaults/Home +
  OBSIGATE_HOME_ROOT (absente = fonctionnalité inactive).
- Tests : tests/test_user_home.py (12) + tests/test_auth_api.py::TestUserHome (2).
This commit is contained in:
2026-10-10 00:40:35 -04:00
parent f4c8504c8d
commit 8235d632b8
19 changed files with 700 additions and 17 deletions
+32 -1
View File
@@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
> **En cours de développement** : les changements à venir sont listés dans la section
> [Unreleased](#unreleased). La dernière version livrée est **2.63.0**.
> [Unreleased](#unreleased). La dernière version livrée est **2.64.0**.
---
@@ -14,6 +14,37 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
---
## [2.64.0] — 2026-10-10
### Ajouté
- **#194 — Dossier personnel par utilisateur**
- Chaque utilisateur créé reçoit `<OBSIGATE_HOME_ROOT>/<username>` (ex.
`/NFS/OBSIDIAN_DOC/Home/<user>` côté hôte) monté comme un vault propre
`home-<user>` : l'isolation utilise l'**ACL par vault existante**
(`check_vault_access`), sans nouvelle ACL par chemin.
- `backend/user_home.py` : `ensure_user_home()` idempotent (mkdir + registre
vault + watcher + octroi dans `user.vaults`), appelé à la création d'un
compte (`POST /api/auth/admin/users`) **et** au démarrage
(`ensure_all_user_homes()` : migration des users existants + réparation
d'un dossier ou d'un registre perdu).
- **Registre persistant des vaults dynamiques** `data/vaults.json`
(`load_vault_config()` le fusionne avec les env `VAULT_N_*`) : auparavant,
tout vault ajouté à la volée (`/api/vaults/add`) disparaissait au premier
reindex complet et au redémarrage.
- Suppression d'un compte → vault refermé (index/watcher/registre) mais
**dossier conservé** (aucune perte de données).
- Correctif : `reload_single_vault` remet la config du vault après
`remove_vault_from_index` (sinon le vault disparaissait de
`vault_config` jusqu'au rechargement complet).
- Déploiement : montage unique `/NFS/OBSIDIAN_DOC/Home:/vaults/Home` +
variable `OBSIGATE_HOME_ROOT` (fonctionnalité inactive sans cette
variable — dev, tests, desktop inchangés).
- Tests : `tests/test_user_home.py` (10) + 2 tests API dans
`test_auth_api.py` (provisionnement, isolation, retrait).
---
## [2.63.0] — 2026-10-09
### Ajouté