feat(admin): D-13 partial — bannière "MODE ADMIN" + doc périmètre
## 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) <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user