142 lines
3.6 KiB
Markdown
142 lines
3.6 KiB
Markdown
# 👥 Gestion des Administrateurs - Mes Budgets Participatifs
|
|
|
|
## 🔐 **Approche Sécurisée**
|
|
|
|
La gestion des utilisateurs et administrateurs se fait **uniquement via l'interface Supabase** pour une sécurité maximale. L'application ne permet pas la création d'utilisateurs.
|
|
|
|
## 📋 **Étapes de Configuration**
|
|
|
|
### 1. **Créer un utilisateur dans Supabase**
|
|
|
|
1. Allez dans votre projet Supabase
|
|
2. **Authentication** > **Users**
|
|
3. Cliquez sur **"Add user"**
|
|
4. Remplissez :
|
|
- **Email** : `admin@example.com`
|
|
- **Password** : Mot de passe sécurisé
|
|
- **Email confirm** : ✅ (cochez pour confirmer l'email)
|
|
5. Cliquez sur **"Create user"**
|
|
|
|
### 2. **Ajouter l'utilisateur comme administrateur**
|
|
|
|
1. Allez dans **SQL Editor**
|
|
2. Exécutez cette requête pour ajouter un admin :
|
|
|
|
```sql
|
|
-- Ajouter un administrateur
|
|
INSERT INTO admin_users (id, email, role)
|
|
VALUES (
|
|
'USER_ID_FROM_SUPABASE',
|
|
'admin@example.com',
|
|
'admin'
|
|
);
|
|
|
|
-- Ou pour un super administrateur
|
|
INSERT INTO admin_users (id, email, role)
|
|
VALUES (
|
|
'USER_ID_FROM_SUPABASE',
|
|
'admin@example.com',
|
|
'super_admin'
|
|
);
|
|
```
|
|
|
|
**Pour obtenir l'USER_ID :**
|
|
- Allez dans **Authentication** > **Users**
|
|
- Trouvez votre utilisateur
|
|
- Copiez l'ID (format UUID)
|
|
|
|
### 3. **Vérifier la configuration**
|
|
|
|
Exécutez cette requête pour vérifier :
|
|
|
|
```sql
|
|
SELECT * FROM admin_users;
|
|
```
|
|
|
|
## 🔧 **Gestion des Rôles**
|
|
|
|
### **Rôles disponibles :**
|
|
|
|
- **`admin`** : Gestion des campagnes, propositions, participants
|
|
- **`super_admin`** : Toutes les permissions admin + gestion des autres administrateurs
|
|
|
|
### **Changer le rôle d'un administrateur :**
|
|
|
|
```sql
|
|
-- Promouvoir en super admin
|
|
UPDATE admin_users
|
|
SET role = 'super_admin'
|
|
WHERE email = 'admin@example.com';
|
|
|
|
-- Rétrograder en admin
|
|
UPDATE admin_users
|
|
SET role = 'admin'
|
|
WHERE email = 'admin@example.com';
|
|
```
|
|
|
|
### **Supprimer un administrateur :**
|
|
|
|
```sql
|
|
-- Supprimer de la table admin_users
|
|
DELETE FROM admin_users
|
|
WHERE email = 'admin@example.com';
|
|
|
|
-- Note : L'utilisateur reste dans auth.users
|
|
-- Pour le supprimer complètement, allez dans Authentication > Users
|
|
```
|
|
|
|
## 🛡️ **Sécurité**
|
|
|
|
### **Avantages de cette approche :**
|
|
|
|
- ✅ **Aucune création d'utilisateur** depuis l'application
|
|
- ✅ **Gestion centralisée** via Supabase
|
|
- ✅ **Audit complet** des utilisateurs
|
|
- ✅ **Politiques RLS** strictes
|
|
- ✅ **Pas de clé de service** exposée dans l'app
|
|
|
|
### **Bonnes pratiques :**
|
|
|
|
1. **Utilisez des mots de passe forts**
|
|
2. **Limitez le nombre de super admins**
|
|
3. **Auditez régulièrement** la liste des administrateurs
|
|
4. **Supprimez les comptes inactifs**
|
|
5. **Utilisez des emails professionnels**
|
|
|
|
## 🔍 **Vérification**
|
|
|
|
### **Tester la connexion :**
|
|
|
|
1. Lancez l'application : `npm run dev`
|
|
2. Allez sur `/admin`
|
|
3. Connectez-vous avec les identifiants créés
|
|
4. Vérifiez que vous avez accès aux fonctionnalités
|
|
|
|
### **Tester les permissions :**
|
|
|
|
```sql
|
|
-- Vérifier les admins actuels
|
|
SELECT id, email, role, created_at
|
|
FROM admin_users
|
|
ORDER BY created_at DESC;
|
|
```
|
|
|
|
## 🚨 **Dépannage**
|
|
|
|
### **Problème : "Accès refusé"**
|
|
- Vérifiez que l'utilisateur existe dans `auth.users`
|
|
- Vérifiez qu'il est bien dans `admin_users`
|
|
- Vérifiez le rôle (admin ou super_admin)
|
|
|
|
### **Problème : "Utilisateur non trouvé"**
|
|
- Vérifiez l'email dans `auth.users`
|
|
- Vérifiez l'ID utilisé dans `admin_users`
|
|
|
|
### **Problème : "Permissions insuffisantes"**
|
|
- Vérifiez le rôle dans `admin_users`
|
|
- Les super admins ont plus de permissions
|
|
|
|
---
|
|
|
|
**Note :** Cette approche garantit une sécurité maximale en centralisant la gestion des utilisateurs dans Supabase.
|