Création des utilisateurs
Peupler la base avec des utilisateurs aux rôles variés
Notions théoriques
Dans notre projet Supabase, la gestion des utilisateurs repose sur 2 éléments complémentaires :
- L’interface Auth : permet de gérer les comptes utilisateurs (email, mot de passe, statut de connexion).
- La table
user_roles
: permet d’attribuer un rôle personnalisé à chaque utilisateur (ex. : 'student', 'admin').
Création d’un utilisateur via Supabase Auth
L’interface Auth de Supabase permet d’ajouter un utilisateur manuellement. Cela crée automatiquement une ligne dans la table auth.users
, qui est une table système gérée par Supabase.
Un utilisateur Auth possède au minimum :
- un identifiant unique (UUID),
- un email,
- un mot de passe (crypté),
- un statut (confirmé, en attente…).
L’UUID de l’utilisateur est généré automatiquement et servira de clé étrangère dans d’autres tables (comme profiles
, user_roles
, etc.).
Rôle des utilisateurs dans l’application
Dans une application multi-utilisateurs, il est souvent nécessaire de distinguer les droits d’accès.
On utilise pour cela une table des rôles (souvent appelée user_roles
) et un type ENUM (user_role
) pour restreindre les rôles possibles.
Exemple :
create type user_role as enum ('guest', 'student', 'teacher', 'admin', 'super-admin');
Et la table associée :
create table user_roles (
id uuid default uuid_generate_v4() primary key,
user_id uuid references auth.users(id) not null,
role user_role not null default 'guest',
created_at timestamp with time zone default current_timestamp,
updated_at timestamp with time zone default current_timestamp
);
Chaque utilisateur peut avoir un seul rôle dans cette table. On peut ajouter une contrainte unique(user_id)
pour l’imposer.
Insertion manuelle dans la table user_roles
Une fois les utilisateurs créés via Auth, il est possible d’ajouter leurs rôles via des requêtes SQL :
insert into user_roles (user_id, role)
values ('uuid-de-l-utilisateur', 'student');
Sécurité des mots de passe et bonnes pratiques
- Utiliser des mots de passe temporaires à la création d’un utilisateur.
- Forcer le changement de mot de passe au premier login.
- Implémenter une politique de rotation des mots de passe (ex. : expiration tous les 90 jours).
- Ne jamais stocker les mots de passe en clair (Supabase les crypte automatiquement).
Limiter les rôles possibles via un type ENUM évite les erreurs de saisie et les escalades de privilèges involontaires.
Exemple pratique
Il est possible de créer des utilisateurs avec des rôles différents via l’interface Auth de Supabase,
puis d’insérer leurs rôles dans la table user_roles
en SQL.
1. Créer les utilisateurs dans l’interface Auth
Dans Supabase :
- Aller dans l’onglet Auth > Users
- Cliquer sur + Add User
- Remplir les champs :
- Email :
guest@example.com
,student@example.com
, etc. - Password : un mot de passe temporaire
- Ne pas cocher "Confirm immediately" si on veut forcer la validation par email (optionnel)
- Email :
Créer 5 utilisateurs :
Mot de passe | Rôle à attribuer | |
---|---|---|
guest@example.com | Temporaire123! | guest |
student@example.com | Temporaire123! | student |
teacher@example.com | Temporaire123! | teacher |
admin@example.com | Temporaire123! | admin |
superadmin@example.com | Temporaire123! | super-admin |
2. Récupérer les UUID des utilisateurs
Dans l’interface SQL ou Table Editor, exécuter :
select id, email from auth.users;
Copier les UUID de chaque utilisateur.
3. Insérer les rôles dans la table user_roles
Pour chaque utilisateur, insérer une ligne dans user_roles
:
insert into user_roles (user_id, role)
values ('uuid-du-guest', 'guest'),
('uuid-du-student', 'student'),
('uuid-du-teacher', 'teacher'),
('uuid-du-admin', 'admin'),
('uuid-du-superadmin', 'super-admin');
4. Vérifier que les données ont bien été insérées
select * from user_roles;
Vérifier que chaque utilisateur a bien un rôle associé.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Créer des utilisateurs dans Supabase et leur attribuer un rôle
Étape 1 : Créer les 5 utilisateurs via l'interface Auth de Supabase
- Ouvrir Supabase et accéder à votre projet.
- Aller dans Auth > Users.
- Cliquer sur + Add User pour chaque utilisateur.
- Remplir les champs suivants :
- Email : choisir un email distinct pour chaque utilisateur.
- Password : utiliser un mot de passe temporaire (exemple :
Temporaire123!
). - Ne pas cocher "Confirm immediately".
Créer les 5 utilisateurs suivants :
Mot de passe | |
---|---|
guest@example.com | Temporaire123! |
student@example.com | Temporaire123! |
teacher@example.com | Temporaire123! |
admin@example.com | Temporaire123! |
superadmin@example.com | Temporaire123! |
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Récupérer les UUID des utilisateurs créés
- Aller dans l’onglet SQL Editor ou Table Editor.
- Lancer la requête suivante :
select id, email from auth.users;
- Copier les UUID associés à chaque email.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 : Attribuer un rôle à chaque utilisateur dans la table user_roles
- S'assurer que la table
user_roles
et le type ENUMuser_role
existent (créés lors de la séance 6). - Exécuter une requête
INSERT
pour chaque utilisateur :
insert into user_roles (user_id, role)
values
('UUID_guest', 'guest'),
('UUID_student', 'student'),
('UUID_teacher', 'teacher'),
('UUID_admin', 'admin'),
('UUID_superadmin', 'super-admin');
Remplacer les UUID_...
par les UUID récupérés à l’étape précédente.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 : Vérifier l’attribution correcte des rôles
Exécuter la requête suivante pour voir les utilisateurs et leurs rôles :
select u.email, r.role
from auth.users u
join user_roles r on u.id = r.user_id;
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 : Sécuriser les comptes créés
- Activer l’option "Force password change" pour chaque utilisateur si disponible.
- Mettre en place une politique de rotation des mots de passe (à documenter dans votre livrable).
- Vérifier que les mots de passe ne sont pas stockés en clair.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 6 : Préparer les données pour la suite du projet
Vérifier que la base contient maintenant :
- 5 utilisateurs dans
auth.users
- 5 entrées dans
user_roles
- Le type ENUM
user_role
bien défini
Une solution
Vous devez être connecté pour voir le contenu.