fix: un dossier perso n'est plus visible par les autres comptes #194
CI / lint (push) Successful in 2m57s
CI / security (push) Successful in 1m40s
CI / test (push) Successful in 4m39s
CI / build (push) Successful in 1m34s
CI / e2e (push) Successful in 17m44s

L'admin (vaults: ["*"]) voyait le home de chaque utilisateur dans sa
barre latérale : "*" ouvrait tous les vaults, home-* compris.

- backend/auth/middleware.py : check_vault_access exige un octroi
  explicite pour tout vault home-* (nouveau is_home_vault()).
- Filtres « * » en dur remplacés par check_vault_access : dashboard,
  conflits, liens retour, favoris, abonnements push.
- /api/search : search_vaults(is_allowed=…) filtre les bruts avant
  pagination (total et page restent justes).
- backend/user_home.py : _grant n'écarte plus les comptes « * » —
  l'admin reçoit son propre home-admin (auto-réparé au démarrage).
- Tests : test_user_home.py +2, assertion API inversée dans
  test_auth_api.py (admin ne voit plus home-alice).
This commit is contained in:
2026-10-10 16:42:00 -04:00
parent 10453d8dfe
commit 8662d23ec8
23 changed files with 152 additions and 39 deletions
+10
View File
@@ -142,6 +142,11 @@ def require_admin(current_user=Depends(require_auth)):
return current_user
def is_home_vault(vault_name: str) -> bool:
"""Un dossier personnel (#194) : vault « home-<user> »."""
return vault_name.startswith("home-")
def check_vault_access(vault_name: str, user: dict) -> bool:
"""Check if a user has access to a specific vault.
@@ -149,8 +154,13 @@ def check_vault_access(vault_name: str, user: dict) -> bool:
- vaults == ["*"] → full access (admin default)
- vault_name in vaults → access granted
- otherwise → denied
#194 : un dossier personnel n'est **jamais** couvert par ``*`` — sinon
un admin (``vaults: ["*"]``) verrait le dossier de chaque utilisateur.
"""
vaults = user.get("_token_vaults") or user.get("vaults", [])
if is_home_vault(vault_name):
return vault_name in vaults
if "*" in vaults:
return True
return vault_name in vaults