improve security (change RLS, and allow table sensitive access only at server side, with supabase service key)
This commit is contained in:
141
docs/ADMIN-MANAGEMENT.md
Normal file
141
docs/ADMIN-MANAGEMENT.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# 👥 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.
|
||||
Reference in New Issue
Block a user