diff --git a/Pseudonymisation_Gui_V5.py b/Pseudonymisation_Gui_V5.py index e6ea4ce..e91c50f 100644 --- a/Pseudonymisation_Gui_V5.py +++ b/Pseudonymisation_Gui_V5.py @@ -372,9 +372,16 @@ class ToolTip: class App: def __init__(self, root: tk.Tk): self.root = root - # Titre avec version longue pour identifier la build au premier coup d'œil - # (évite les confusions entre exe ancien/nouveau lors des tests). - self.root.title(f"{APP_TITLE} — {_version_long()}") + # D-13 — Mode admin : titre annoté si admin actif (signale au bêta + # et à l'opérateur que des fonctions sensibles sont déverrouillées). + # L'activation se fait via env ANON_ADMIN=1 ou fichier .admin. + try: + from admin_mode import is_admin as _is_admin + _admin_active = _is_admin() + except Exception: + _admin_active = False + admin_tag = " [⚙ MODE ADMIN]" if _admin_active else "" + self.root.title(f"{APP_TITLE} — {_version_long()}{admin_tag}") self.root.geometry("780x820") self.root.minsize(600, 650) diff --git a/docs/coordination/decisions/2026-06-02_dom_d13-partial-scope.md b/docs/coordination/decisions/2026-06-02_dom_d13-partial-scope.md new file mode 100644 index 0000000..ee58acd --- /dev/null +++ b/docs/coordination/decisions/2026-06-02_dom_d13-partial-scope.md @@ -0,0 +1,85 @@ +--- +from: dom +to: all +date: 2026-06-02T17:00:00+02:00 +topic: d13-partial-scope-mvp +status: closed +priority: blocker +references: + - decision: 2026-06-02_dom_mvp-pivots-strategiques.md (D-13) + - commit: 40c6f23 (admin_mode.py) +--- + +# D-13 — Périmètre partiel pour le MVP, complet reporté à v11.5 + +## Décision + +D-13 « réglages partiellement protégés » est livré **partiellement** dans +le MVP, le reste étant reporté à la transposition GUI customtkinter v6 +(v11.5). + +## Ce qui est livré dans le MVP + +### Module `admin_mode.py` + +Détecte si le mode admin est actif via : +1. Variable d'env `ANON_ADMIN=1` (ou `true`/`yes`/`on`) +2. Fichier `.admin` à la racine de l'application + +Expose `is_admin()` et `admin_required(feature_name)`. + +### Protections actives + +| Réglage | Protection | Effet | +|---|---|---| +| **VLM Ollama** | ✅ Caché en non-admin | Le bêta ne peut pas envoyer de contenu à Ollama externe | +| **Titre fenêtre** | ✅ Affiche `[⚙ MODE ADMIN]` si actif | Signal visuel au bêta et à l'opérateur | + +## Ce qui est reporté à v11.5 (customtkinter v6) + +| Réglage | Pourquoi reporté | +|---|---| +| **Stopwords personnalisés** | Modifier 2874 lignes tkinter sans casser = risque élevé | +| **Profils techniques** (regex_overrides, force_terms) | idem | +| **Choix moteur NER** (GLiNER, CamemBERT, EDS-Pseudo) | idem | +| **Sauvegarde fichiers config sensibles** | idem | +| **Cases à cocher VLM annexes** (profile_force_disable_vlm) | Sans effet en non-admin de toute façon (VlmManager=None) | + +## Pourquoi le report est acceptable + +1. **Le risque critique RGPD** (envoi externe à Ollama) est **résolu** par D-11 +2. Les autres réglages, bien que visibles, **ne déclenchent pas de fuite externe** +3. La transposition customtkinter v6 va de toute façon refondre toute l'UI +4. Patcher 2874 lignes tkinter aujourd'hui = double travail (à refaire en v6) + +## Décisions de Dom à acter + +- **Pour le MVP bêta** : D-13 partial validé, bêta-testeur Province Bêta + n'a pas accès au VLM +- **Pour la v11.5** : D-13 complet à implémenter dans la transposition + customtkinter v6 — sections "Paramètres avancés" et "Profils + techniques" cachées ou désactivées en non-admin + +## Activation du mode admin + +```bash +# Linux/Mac +export ANON_ADMIN=1 +python Pseudonymisation_Gui_V5.py + +# Windows (PowerShell) +$env:ANON_ADMIN = "1" +.\Pseudonymisation.exe + +# Permanent (Linux/Mac) : créer un fichier .admin à la racine +touch /chemin/vers/Pseudonymisation/.admin +``` + +## Statut + +✅ **Acté**. Documentation pour audit DPO/CNIL : + +- Le bêta-testeur Province Bêta ne dispose pas du mode admin +- Le fichier `.admin` n'est pas livré dans le pack OwnCloud +- Aucune variable d'env n'est configurée par défaut +- Pour activer le mode admin, l'opérateur doit faire une action explicite