Comprendre les 4 rôles¶
En une phrase
Argon a 4 rôles utilisateur (super-admin, admin, enseignant, parent) qui déterminent ce que chacun voit et peut faire. Les permissions sont vérifiées côté serveur (impossible de contourner via l'URL) et isolent strictement les écoles entre elles.
Cet article explique non seulement qui peut quoi, mais pourquoi ce découpage, comment Argon garantit la sécurité, et comment ajuster les permissions au cas par cas pour vos besoins spécifiques.
Pourquoi 4 rôles ?¶
Argon aurait pu avoir 20 rôles spécialisés (caissier, infirmier, chauffeur, etc.) ou 1 seul rôle "utilisateur". Pourquoi 4 ?
Le principe : 4 archétypes + permissions granulaires¶
Les 4 rôles correspondent aux 4 grands archétypes d'utilisateurs d'une école :
| Rôle | Archétype |
|---|---|
| Super-admin | L'équipe technique Argon (cross-école) |
| Admin | La direction et l'administration de l'école |
| Enseignant | Les profs (et seuls les profs) |
| Parent | Les familles (et seuls les parents) |
Pour les rôles fonctionnels plus spécifiques (infirmier, chauffeur, cantinier, comptable), Argon utilise des permissions granulaires ajoutées à un rôle de base (généralement admin).
Avantage : la sécurité reste simple (4 chemins de contrôle), mais la flexibilité fonctionnelle est maximale (vous pouvez avoir 50 admins avec 50 jeux de permissions différents).
Comparaison avec d'autres systèmes¶
| Approche | Avantage | Inconvénient |
|---|---|---|
| 1 seul rôle "user" | Très simple à implémenter | Aucune isolation, impossible à sécuriser sérieusement |
| N rôles spécialisés (caissier, infirmier...) | Sémantique claire | Combinatoire explose, dur à maintenir, impossible si quelqu'un a 2 chapeaux |
| 4 rôles + permissions (Argon) | Sécurité robuste + flexibilité | Légère courbe d'apprentissage |
Verrouillage côté serveur¶
Important : les vérifications de rôle/permission se font côté backend Go, pas dans le navigateur. Cela signifie :
- ❌ Un utilisateur qui essaye d'accéder à
/admin/financesvia URL directe alors qu'il n'a pas le rôle → réponse403 Forbidden - ❌ Un utilisateur qui modifie la requête API (curl, Postman, dev tools) → rejet serveur
- ❌ Un enseignant qui essaye d'accéder aux notes d'une classe qui n'est pas la sienne → rejet
- ✅ Pour des raisons d'UX, certains éléments d'UI sont cachés côté frontend, mais la vraie sécurité est côté API
C'est la différence entre la sécurité par obscurité (cacher l'URL — faible) et la sécurité par autorisation (vérifier à chaque requête — robuste).
Vue d'ensemble : tableau rapide¶
| Rôle | Pour qui | Visibilité | Modifie quoi |
|---|---|---|---|
| Super-admin | Équipe Argon | Tous les établissements | Configuration plateforme, sécurité, support |
| Admin établissement | Directeur, secrétariat, comptabilité | Tout son école (mais pas les autres écoles) | Élèves, classes, finances, communication, modules |
| Enseignant | Profs uniquement | Ses classes et matières (vu via emploi du temps) | Notes, présences, cahier de textes, messages |
| Parent | Familles uniquement | Ses enfants uniquement | Son dossier, paiements, justifications, réservations |
Parent¶
C'est le rôle le plus restreint et le plus important quantitativement (souvent 80 % des utilisateurs d'une école).
Ce qu'un parent peut faire¶
Suivi de l'enfant :
- Voir le profil de chaque enfant : classe, photo, parcours scolaire, matricule
- Consulter notes (par matière, par évaluation)
- Consulter bulletins (téléchargement PDF)
- Consulter présences (justifier les absences)
- Consulter le cahier de textes (devoirs, leçons)
- Consulter l'emploi du temps de l'enfant
Finances :
- Consulter ses factures
- Payer en ligne (Mobile Money, carte) ou voir le solde restant
- Voir l'échéancier de tranches
- Télécharger les reçus
Modules métier (selon activation école) :
- Boutique : commander uniformes, fournitures
- Cantine : réserver les repas, voir le menu
- Transport : voir les pointages temps réel du bus de l'enfant
- Infirmerie : éditer le dossier médical de l'enfant, voir l'historique des passages
Communication :
- Messagerie avec les enseignants de l'enfant
- Recevoir les annonces de l'école
- Inscriptions publiques (ajouter un nouvel enfant)
Ce qu'un parent NE peut PAS faire¶
| Restriction | Pourquoi |
|---|---|
| Voir les données d'autres élèves | Isolation par parent_id côté DB |
| Voir les bulletins/notes d'autres enfants | Idem |
| Créer ou supprimer un élève | Seul l'admin peut |
| Saisir des notes | Réservé aux enseignants |
| Configurer l'école | Réservé aux admins |
| Modifier les frais | Réservé aux admins |
| Accéder aux outils techniques (logs, exports en masse) | Sécurité |
Plusieurs enfants — gestion automatique
Si vous avez plusieurs enfants dans la même école, un seul compte parent suffit. Ils apparaissent tous dans /parent/mes-enfants. Un sélecteur permet de basculer entre eux dans les modules concernés (cantine, transport, infirmerie, finances).
Le cas "deux parents séparés"¶
Cas fréquent : parents divorcés, garde alternée, ou simplement deux parents qui veulent tous deux suivre l'enfant.
Argon v1 (limitation actuelle) : un élève est rattaché à un seul compte parent principal.
Workaround recommandé :
- Mettre l'email du parent principal sur le compte (souvent celui qui paie l'écolage)
- Ajouter le second parent comme contact d'urgence dans le dossier médical
- Les deux peuvent recevoir des notifications email si les deux adresses sont configurées
Évolution prévue : support natif multi-parents (plusieurs comptes liés à un même élève) — sur la roadmap.
Sécurité parent¶
Isolation forte :
- Toutes les requêtes API parent sont filtrées par
WHERE parent_id = $auth_user_id - Si un parent malicieux essaye
/api/eleves/12345alors que l'élève 12345 n'est pas le sien :404 Not Found(volontairement ambigu pour ne pas révéler l'existence de l'élève) - Les exports parents ne contiennent que les données de ses propres enfants
Enseignant¶
Le rôle qui enseigne et qui touche aux notes et aux présences.
Ce qu'un enseignant peut faire¶
Pédagogique :
- Voir son emploi du temps complet
- Pointer les présences de ses classes
- Saisir les notes (par cours / matière / trimestre)
- Tenir son cahier de textes (leçons, devoirs)
- Consulter les bulletins de ses élèves (lecture seule)
- Voir le profil de ses élèves (lecture seule)
Communication :
- Messagerie avec les parents de ses élèves
- Recevoir les annonces destinées au corps enseignant
- Recevoir les notifications de saisie en retard
Demandes :
- Demander des dotations en matériel (Boutique en mode demande, dotation pédagogique)
Ce qu'un enseignant NE peut PAS faire¶
| Restriction | Pourquoi |
|---|---|
| Voir les notes d'élèves qu'il n'enseigne pas | Restriction par classe enseignée |
| Configurer l'école (frais, classes...) | Réservé aux admins |
| Voir les finances (sauf finances personnelles) | Confidentialité |
| Modifier les comptes utilisateurs | Sécurité |
| Accéder aux dossiers médicaux | Sauf permission infirmerie.process accordée explicitement |
| Voir les notes définitives après clôture des bulletins | Lecture seule après publication |
Filtre par classe enseignée¶
Un enseignant ne voit que les classes où il enseigne (déterminé par l'emploi du temps Admin → Emploi du temps).
Implication critique : un enseignant qui n'a pas de cours dans son emploi du temps ne voit aucune classe. C'est l'erreur #1 quand un enseignant se plaint que "tout est vide".
Solution : Admin → Emploi du temps → ajouter ses créneaux puis l'enseignant verra apparaître ses classes.
Prof principal (titulaire)¶
Le prof principal est un enseignant désigné pour une classe spécifique avec des responsabilités étendues :
- Saisir l'appréciation générale sur le bulletin (pas seulement matière)
- Présider le conseil de classe pour cette classe
- Recevoir les notifications spécifiques (élève en difficulté, etc.)
Désignation : Admin → Classes → modifier → Prof principal (un seul par classe).
Permission technique : c'est encore le rôle enseignant standard, simplement avec une affectation supplémentaire en DB.
Cas : enseignant avec rôle additionnel¶
Cas fréquent : un enseignant est aussi chauffeur de bus, ou aussi infirmier (école rurale avec petit effectif). Comment gérer ?
Solution recommandée : créer 2 comptes utilisateur distincts pour la même personne.
- Compte enseignant (pour ses cours)
- Compte admin (avec permission
transport.processpour conduire)
Avantage : isolation claire des actions (sa saisie de notes n'est pas mélangée avec ses pointages chauffeur).
Alternative (moins propre) : modifier le rôle de la personne en admin et lui rendre les permissions enseignant via permissions granulaires (notes.create, presences.create). Plus flexible mais moins lisible.
Admin établissement¶
Le rôle direction : il gère tout sur son école, mais rien sur les autres.
Ce qu'un admin peut faire¶
Gestion structurelle :
- Élèves, parents, classes, matières, salles, niveaux
- Enseignants et leurs affectations
- Année scolaire et calendrier
- Emploi du temps
Finances :
- Frais et tarifs
- Génération de factures
- Saisie de paiements (comptoir)
- Configuration des tranches
- Reporting financier complet
Communication :
- Annonces (toutes audiences)
- Messagerie (peut intervenir dans toute conversation de son école)
- Événements
Modules métier (selon activation) :
- Boutique : catalogue + stock + ventes
- Transport : lignes + véhicules + chauffeurs
- Cantine : menus + facturation
- Infirmerie : dossiers + permissions
Bulletins :
- Génération en lot
- Configuration coefficients
- Conseils de classe + décisions
Import/Export :
- Import CSV élèves, enseignants, notes
- Export en PDF, XLSX, JSON
Configuration plateforme :
- Identité école (logo, agrément, etc.)
- Politique financière (devise, seuils...)
- Permissions des autres utilisateurs
Ce qu'un admin NE peut PAS faire¶
| Restriction | Pourquoi |
|---|---|
| Voir d'autres établissements | Isolation multi-tenant (Row Level Security PostgreSQL) |
| Modifier la configuration globale Argon | Réservé au super-admin Argon |
| Accéder aux logs techniques | Sécurité |
| Modifier l'identifiant d'un autre admin sans son accord | Audit log déclencherait alerte |
Permissions granulaires d'un admin¶
Par défaut, un admin a toutes les permissions sur son école. Mais vous pouvez restreindre un admin pour limiter ses droits.
Cas d'usage typiques :
| Persona | Permissions à retirer | Permissions à garder |
|---|---|---|
| Secrétariat (saisie élèves) | finances.manage, bulletins.publish |
eleves.create, eleves.update, parents.create |
| Comptable | eleves.delete, enseignants.manage |
finances.*, factures.*, paiements.* |
| Infirmier | finances.*, notes.* |
infirmerie.* |
| Responsable cantine | finances.manage, bulletins.* |
cantine.*, cantine.process |
| Surveillant | finances.*, notes.create |
presences.*, eleves.view |
Configuration : Admin → Utilisateurs → cliquer un utilisateur → onglet Permissions → cocher/décocher.
Sécurité admin¶
Isolation multi-tenant stricte :
- Chaque école a un
etablissement_id - Toutes les requêtes admin sont filtrées par cet ID
- Au niveau DB, Row Level Security PostgreSQL est activé : même un développeur Argon qui tente une requête mal formée sur la DB ne peut pas sortir de son tenant
Audit log : toute modification effectuée par un admin est tracée (qui, quand, quoi, ancien/nouveau valeur). Conservation 5 ans.
Super-admin (équipe Argon uniquement)¶
C'est le rôle de l'équipe technique Argon Education — vous ne devriez jamais l'avoir sauf si vous travaillez pour Argon.
Ce qu'un super-admin peut faire¶
Cross-tenant :
- Onboarder de nouveaux établissements
- Voir des statistiques agrégées (pas de données nominatives) entre écoles
- Migrer des données entre tenants (cas exceptionnel, ex : fusion d'écoles)
- Suspendre un tenant en cas d'incident
- Configurer la plateforme globale (versions, fonctionnalités, expériences)
Support :
- Accéder à un tenant avec consentement explicite de l'admin pour debug
- Ouvrir un ticket support technique
- Diagnostiquer un bug
Sécurité :
- Voir les logs techniques
- Investiguer des incidents sécurité
- Bloquer une IP malicieuse
Audit obligatoire¶
Chaque action d'un super-admin sur un tenant client est tracée dans un audit log spécial, consultable par l'admin du tenant concerné dans Admin → Audit → Filtrer par super-admin.
C'est notre engagement éthique : nous ne touchons pas à vos données sans que vous le sachiez.
Limitation volontaire¶
Le super-admin ne peut pas :
- Exporter en masse les données d'un tenant sans audit
- Modifier les notes ou bulletins d'un élève
- Connaître les mots de passe (hashés bcrypt)
- Désactiver l'audit log
Comment changer le rôle d'un utilisateur¶
Admin → Utilisateurs → cliquer un utilisateur → Modifier le rôle
Procédure¶
- Sélectionner le nouveau rôle
- Confirmer
- L'utilisateur est immédiatement déconnecté (sa session est invalidée)
- À sa prochaine connexion, il accède aux fonctionnalités du nouveau rôle
Restrictions¶
- Un admin ne peut pas se transformer lui-même en super-admin (sécurité)
- Un admin ne peut pas modifier les rôles dans une autre école (isolation tenant)
- Le dernier admin d'une école ne peut pas être dégradé (sinon plus personne pour gérer)
Cas particulier : parent qui devient enseignant¶
Cas : un parent existant de l'école devient également enseignant (recrutement interne).
Procédure recommandée :
- Créer un compte enseignant séparé avec un autre email (
marie.enseignante@isfa.cm) - Garder le compte parent intact (
marie@gmail.com) - La personne se connecte avec un compte ou l'autre selon son activité
Pourquoi pas changer le rôle ? Parce que perdre le rôle parent signifierait perdre l'accès au profil de ses enfants. Maintenir 2 comptes = isolation propre.
Permissions granulaires : la liste complète¶
Au-delà des 4 rôles, Argon a une trentaine de permissions granulaires qui peuvent être ajoutées ou retirées au cas par cas (côté admin uniquement).
Catalogue des permissions¶
| Permission | Sens | Rôle qui l'a par défaut |
|---|---|---|
eleves.view |
Voir la liste élèves | admin |
eleves.create |
Créer un élève | admin |
eleves.update |
Modifier un élève | admin |
eleves.delete |
Supprimer un élève | admin |
parents.manage |
Gérer les comptes parents | admin |
enseignants.manage |
Gérer les comptes enseignants | admin |
classes.manage |
CRUD classes | admin |
matieres.manage |
CRUD matières | admin |
emploi_du_temps.manage |
EDT | admin |
notes.create |
Saisir des notes | enseignant + admin |
notes.update |
Modifier des notes | enseignant + admin |
presences.create |
Pointer présences | enseignant + admin |
bulletins.generate |
Générer bulletins | admin |
bulletins.publish |
Publier bulletins | admin |
conseils.manage |
Gérer conseils de classe | admin |
finances.view |
Voir finances | admin |
finances.manage |
Gérer finances | admin |
factures.create |
Créer factures | admin |
paiements.process |
Saisir paiements | admin |
communication.send |
Envoyer messages | tous |
annonces.create |
Créer annonces | admin |
boutique.manage |
Gérer boutique | admin |
boutique.sell |
Vendre des articles | admin |
transport.manage |
Configurer transport | admin |
transport.process |
Conduire un trajet | admin (sur attribution) |
cantine.manage |
Configurer cantine | admin |
cantine.process |
Pointer repas | admin (sur attribution) |
infirmerie.view |
Voir dossiers médicaux | admin (sur attribution) |
infirmerie.process |
Enregistrer passages | admin (sur attribution) |
import.csv |
Lancer imports CSV | admin |
exports.generate |
Lancer exports | admin |
audit.view |
Voir audit log | admin |
Comment voir/modifier les permissions d'un utilisateur¶
Admin → Utilisateurs → cliquer un utilisateur → onglet Permissions
- Liste de toutes les permissions
- Coche/décoche pour activer/désactiver
- Sauvegarder
Effet immédiat : la prochaine requête API de l'utilisateur reflète les nouvelles permissions.
Tableau de cas d'usage : qui fait quoi ?¶
| Action | Qui peut faire ? |
|---|---|
| Créer une nouvelle classe | Admin avec classes.manage |
| Saisir une note | Enseignant affecté à la classe ET la matière OU Admin avec notes.create |
| Modifier le tarif d'inscription | Admin avec finances.manage |
| Payer une facture | Le parent propriétaire OU Admin saisissant un paiement comptoir |
| Voir le dossier médical d'un élève | Le parent propriétaire OU Infirmier (admin avec infirmerie.view) |
| Conduire un bus et pointer les élèves | Admin avec transport.process (chauffeur) |
| Publier un bulletin | Admin avec bulletins.publish |
| Envoyer une annonce à toute l'école | Admin avec annonces.create |
| Exporter tous les bulletins en PDF | Admin avec exports.generate |
| Désactiver le module Cantine | Admin avec config complète |
En cas de doute / litige¶
"Je ne peux plus accéder à X, c'était possible avant"¶
Causes fréquentes :
- Vos permissions ont été modifiées par un autre admin → consulter
Audit → Filtrer par votre utilisateur - Votre rôle a changé (rare mais possible)
- L'année scolaire active a changé → vous regardez peut-être les données d'une année qui n'est plus accessible
"Je vois quelque chose que je ne devrais pas voir"¶
Signaler immédiatement :
- Notez précisément ce que vous voyez
- Capture d'écran (sans exposer les données)
- Contactez votre admin
- L'admin contacte Argon support si bug confirmé
C'est très rare : Argon est testé pour l'isolation, et l'audit log permettrait de tracer le problème.
"Je n'arrive pas à faire X mais je suis admin"¶
Vérifier dans l'ordre :
- Vos permissions sont peut-être restreintes (autre admin a coché trop peu de cases)
- Vous regardez le mauvais établissement (si vous gérez plusieurs)
- L'année scolaire active n'est pas la bonne
- Bug Argon → ticket support
Erreurs courantes¶
| Symptôme | Cause | Solution |
|---|---|---|
| Parent voit "Aucun enfant" | Compte parent pas encore rattaché à un élève | Admin doit ajouter parent_id sur le profil élève |
| Enseignant ne voit pas ses classes | Pas d'affectation dans l'emploi du temps | Admin doit compléter l'EDT |
| Admin ne peut pas créer un frais | Permission finances.manage désactivée |
Admin principal restaure la permission |
| Infirmier ne voit pas les dossiers | Permission infirmerie.view non accordée |
Admin l'accorde manuellement |
| Chauffeur ne peut pas démarrer un trajet | Permission transport.process non accordée |
Admin l'accorde |
| 403 Forbidden à un endpoint | Rôle insuffisant OU permission manquante | Vérifier rôle + permissions |
| Session interrompue à mi-action | Changement de rôle ou permission par admin | Se reconnecter |
Bonnes pratiques sécurité¶
- ✅ Donner les permissions minimales : pas de "tous admin avec tout", restreindre selon le rôle métier réel
- ✅ Auditer régulièrement :
Admin → Audit→ vérifier les actions sensibles (export en masse, modification frais, etc.) - ✅ Désactiver les comptes inactifs : un admin qui quitte l'école → désactiver son compte dans la journée
- ✅ Mots de passe robustes : exiger 12+ caractères pour les admins (politique configurable)
- ❌ Ne jamais partager un compte admin entre plusieurs personnes (perte de traçabilité audit)
- ❌ Ne jamais désactiver l'audit log (vous en aurez besoin un jour)
Voir aussi¶
- Se connecter — première connexion par rôle
- Checklist de rentrée — créer comptes et permissions à la rentrée
- Importer en masse — créer parents en masse
- Annonces — communication par rôle
- FAQ — questions fréquentes par rôle