feat: implement admin validation middleware, DB integrity scan, automatic schema repair, and reindexing dashboard
This commit is contained in:
49
shop/lib/actions/admin.ts
Normal file
49
shop/lib/actions/admin.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
'use server'
|
||||
|
||||
import { createClient } from '@/lib/supabase/server'
|
||||
import { verifyAdmin } from '@/lib/actions/auth'
|
||||
|
||||
export async function getDatabaseIntegrity() {
|
||||
try {
|
||||
await verifyAdmin()
|
||||
const supabase = await createClient()
|
||||
const { data, error } = await supabase.rpc('check_database_integrity')
|
||||
if (error) {
|
||||
return { success: false, error: error.message }
|
||||
}
|
||||
return { success: true, data }
|
||||
} catch (err: any) {
|
||||
console.error("Error in getDatabaseIntegrity:", err)
|
||||
return { success: false, error: err.message || "Unerwarteter Fehler beim Integritätsscan." }
|
||||
}
|
||||
}
|
||||
|
||||
export async function repairDatabaseSchema() {
|
||||
try {
|
||||
await verifyAdmin()
|
||||
const supabase = await createClient()
|
||||
const { data, error } = await supabase.rpc('repair_database_schema')
|
||||
if (error) {
|
||||
return { success: false, error: error.message }
|
||||
}
|
||||
return { success: true, data }
|
||||
} catch (err: any) {
|
||||
console.error("Error in repairDatabaseSchema:", err)
|
||||
return { success: false, error: err.message || "Unerwarteter Fehler bei der Schemareparatur." }
|
||||
}
|
||||
}
|
||||
|
||||
export async function optimizeDatabaseIndices() {
|
||||
try {
|
||||
await verifyAdmin()
|
||||
const supabase = await createClient()
|
||||
const { data, error } = await supabase.rpc('optimize_database_indices')
|
||||
if (error) {
|
||||
return { success: false, error: error.message }
|
||||
}
|
||||
return { success: true, data }
|
||||
} catch (err: any) {
|
||||
console.error("Error in optimizeDatabaseIndices:", err)
|
||||
return { success: false, error: err.message || "Unerwarteter Fehler bei der Indexoptimierung." }
|
||||
}
|
||||
}
|
||||
@@ -98,3 +98,20 @@ export async function updatePassword(password: string) {
|
||||
}
|
||||
return { success: true }
|
||||
}
|
||||
|
||||
export async function verifyAdmin() {
|
||||
const supabase = await createClient()
|
||||
const { data: { user } } = await supabase.auth.getUser()
|
||||
if (!user) throw new Error("Nicht authentifiziert.")
|
||||
|
||||
const { data: userData, error } = await supabase
|
||||
.from('users')
|
||||
.select('role')
|
||||
.eq('id', user.id)
|
||||
.single()
|
||||
|
||||
if (error || !userData || userData.role !== 'admin') {
|
||||
throw new Error("Zugriff verweigert. Nur Administratoren erlaubt.")
|
||||
}
|
||||
return user
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user