fonctionnalité majeure : setup ultra simplifié (installation/configuration des infos supabase directement du web)
This commit is contained in:
101
src/app/api/fix-rls/route.ts
Normal file
101
src/app/api/fix-rls/route.ts
Normal 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 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user