fonctionnalité majeure : setup ultra simplifié (installation/configuration des infos supabase directement du web)

This commit is contained in:
Yannick Le Duc
2025-08-28 14:05:32 +02:00
parent b7ce1145e3
commit f93c995815
26 changed files with 3066 additions and 341 deletions

View File

@@ -0,0 +1,101 @@
import { NextRequest, NextResponse } from 'next/server';
import { supabaseAdmin } from '@/lib/supabase-admin';
export async function POST(request: NextRequest) {
try {
console.log('🔧 Correction des politiques RLS pour admin_users...');
// 1. Supprimer les politiques RLS existantes problématiques
console.log('🗑️ Suppression des politiques RLS existantes...');
const dropPolicies = [
'DROP POLICY IF EXISTS "Seuls les super admins peuvent voir les utilisateurs admin" ON admin_users;',
'DROP POLICY IF EXISTS "Seuls les super admins peuvent gérer les utilisateurs admin" ON admin_users;',
];
for (const policy of dropPolicies) {
try {
const { error } = await supabaseAdmin.rpc('exec_sql', { sql: policy });
if (error) {
console.warn('⚠️ Erreur lors de la suppression de politique:', error.message);
} else {
console.log('✅ Politique supprimée');
}
} catch (error) {
console.warn('⚠️ Erreur lors de la suppression de politique:', error);
}
}
// 2. Créer de nouvelles politiques RLS simplifiées
console.log('🔨 Création de nouvelles politiques RLS...');
const createPolicies = [
// Politique pour permettre la lecture à tous les utilisateurs connectés
`CREATE POLICY "admin_users_select_policy" ON admin_users
FOR SELECT USING (auth.uid() IS NOT NULL);`,
// Politique pour permettre l'insertion/mise à jour/suppression aux super admins
`CREATE POLICY "admin_users_manage_policy" ON admin_users
FOR ALL USING (
EXISTS (
SELECT 1 FROM admin_users
WHERE admin_users.id = auth.uid()
AND admin_users.role = 'super_admin'
)
);`,
];
for (const policy of createPolicies) {
try {
const { error } = await supabaseAdmin.rpc('exec_sql', { sql: policy });
if (error) {
console.warn('⚠️ Erreur lors de la création de politique:', error.message);
} else {
console.log('✅ Politique créée');
}
} catch (error) {
console.warn('⚠️ Erreur lors de la création de politique:', error);
}
}
// 3. Alternative : utiliser des requêtes directes si exec_sql ne fonctionne pas
console.log('🔧 Tentative de correction alternative...');
try {
// Désactiver temporairement RLS pour permettre la correction
const { error: disableError } = await supabaseAdmin
.from('admin_users')
.select('id')
.limit(1);
if (disableError && disableError.message.includes('infinite recursion')) {
console.log('🔄 Désactivation temporaire de RLS...');
// Note: Cette approche nécessite des privilèges élevés
// En production, il faudrait utiliser l'interface Supabase ou des migrations
console.log('⚠️ Correction manuelle requise via l\'interface Supabase');
}
} catch (error) {
console.warn('⚠️ Erreur lors du test:', error);
}
return NextResponse.json({
success: true,
message: 'Correction des politiques RLS initiée',
note: 'Si le problème persiste, une correction manuelle via l\'interface Supabase peut être nécessaire',
nextSteps: [
'1. Vérifiez dans l\'interface Supabase > Authentication > Policies',
'2. Supprimez les politiques problématiques sur admin_users',
'3. Créez des politiques simplifiées',
'4. Testez à nouveau le diagnostic RLS'
]
});
} catch (error: any) {
console.error('❌ Erreur lors de la correction RLS:', error);
return NextResponse.json(
{ error: `Erreur interne: ${error.message}` },
{ status: 500 }
);
}
}