From b651a26cc025f34346c97e518f013f8c92173beb Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Tue, 2 Jun 2026 17:04:01 +0200 Subject: [PATCH] =?UTF-8?q?feat(admin):=20D-13=20partial=20=E2=80=94=20ban?= =?UTF-8?q?ni=C3=A8re=20"MODE=20ADMIN"=20+=20doc=20p=C3=A9rim=C3=A8tre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Bannière mode admin Ajout d'un suffixe "[⚙ MODE ADMIN]" dans le titre de la fenêtre principale quand `admin_mode.is_admin()` retourne True. Signal visuel clair pour : - Le bêta-testeur (s'il bidouille, il voit qu'il a déverrouillé quelque chose) - L'opérateur Dom (pour vérifier d'un coup d'œil que le mode admin est actif pour ses propres tests) ## Périmètre D-13 partial Documenté dans `decisions/2026-06-02_dom_d13-partial-scope.md` : | Protection | Statut | |---|---| | VLM Ollama caché en non-admin | ✅ (D-11) | | Titre fenêtre signalé en admin | ✅ (ce commit) | | Stopwords personnalisés | ⏭ Reporté v11.5 | | Profils techniques (regex_overrides, force_terms) | ⏭ Reporté v11.5 | | Choix moteur NER | ⏭ Reporté v11.5 | | Sauvegarde configs sensibles | ⏭ Reporté v11.5 | ## Pourquoi le report est OK pour MVP 1. Le risque RGPD critique (envoi externe à Ollama) est résolu par D-11 2. Les autres réglages, bien que visibles, ne déclenchent pas de fuite 3. La transposition customtkinter v6 (v11.5) refondra l'UI — patcher 2874 lignes tkinter aujourd'hui = double travail à refaire en v6 4. Le bêta-testeur n'a pas accès au mode admin (pas de fichier .admin livré, pas d'env var par défaut) ## Activation manuelle - Env : `ANON_ADMIN=1 python Pseudonymisation_Gui_V5.py` - Fichier : créer `.admin` à la racine Co-Authored-By: Claude Opus 4.7 (1M context) --- Pseudonymisation_Gui_V5.py | 13 ++- .../2026-06-02_dom_d13-partial-scope.md | 85 +++++++++++++++++++ 2 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 docs/coordination/decisions/2026-06-02_dom_d13-partial-scope.md 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