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:
|
class App:
|
||||||
def __init__(self, root: tk.Tk):
|
def __init__(self, root: tk.Tk):
|
||||||
self.root = root
|
self.root = root
|
||||||
# Titre avec version longue pour identifier la build au premier coup d'œil
|
# D-13 — Mode admin : titre annoté si admin actif (signale au bêta
|
||||||
# (évite les confusions entre exe ancien/nouveau lors des tests).
|
# et à l'opérateur que des fonctions sensibles sont déverrouillées).
|
||||||
self.root.title(f"{APP_TITLE} — {_version_long()}")
|
# 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.geometry("780x820")
|
||||||
self.root.minsize(600, 650)
|
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