Add SQL execution tool for administrators to manage database tables

Introduce a new admin-only utility tab allowing direct SQL query execution, file uploads (.sql), and logging of operations. Includes server-side endpoint and client-side UI for executing raw SQL commands against the database.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cfbfe47c-0c9a-4ebf-8a41-2937407eccff
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cfbfe47c-0c9a-4ebf-8a41-2937407eccff/ECRh2Iu
This commit is contained in:
michaelschal committed 2025-09-03 14:11:12 +00:00
1 parent 5b338b224e
commit 2c36650edd
6 files changed
+324 -101

No files matched your search

+20 -3
View File
@@ -7,7 +7,8 @@ import {
Server,
Bug,
Cloud,
Send
Send,
Code
} from "lucide-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
@@ -19,6 +20,7 @@ import NocoDBConfig from "./NocoDBConfig";
import DatabaseDebug from "./DatabaseDebug";
import WeatherSettings from "./WeatherSettings";
import WebhookBAPConfig from "./WebhookBAPConfig";
import SQLExecutor from "./SQLExecutor";
export default function Utilities() {
const { user } = useAuthUnified();
@@ -38,9 +40,10 @@ export default function Utilities() {
const canDebugDatabase = user?.role === 'admin';
const canManageWeather = user?.role === 'admin';
const canManageWebhookBAP = user?.role === 'admin';
const canExecuteSQL = user?.role === 'admin';
// Si l'utilisateur n'a aucune permission, afficher le message d'accès refusé
if (!canManageBackups && !canManageNocoDB && !canDebugDatabase && !canManageWeather && !canManageWebhookBAP) {
if (!canManageBackups && !canManageNocoDB && !canDebugDatabase && !canManageWeather && !canManageWebhookBAP && !canExecuteSQL) {
return (
<div className="flex-1 flex items-center justify-center">
<Card className="w-96">
@@ -76,7 +79,7 @@ export default function Utilities() {
{/* Content avec onglets */}
<div className="flex-1 p-6 overflow-hidden">
<Tabs value={activeTab} onValueChange={setActiveTab} className="h-full flex flex-col">
<TabsList className="grid w-full grid-cols-5 mb-6">
<TabsList className="grid w-full grid-cols-6 mb-6">
{canManageBackups && (
<TabsTrigger value="backups" className="flex items-center gap-2">
<Database className="w-4 h-4" />
@@ -107,6 +110,12 @@ export default function Utilities() {
Configuration BAP
</TabsTrigger>
)}
{canExecuteSQL && (
<TabsTrigger value="sql" className="flex items-center gap-2">
<Code className="w-4 h-4" />
Exécution SQL
</TabsTrigger>
)}
</TabsList>
{/* Contenu des onglets */}
@@ -149,6 +158,14 @@ export default function Utilities() {
</div>
</TabsContent>
)}
{canExecuteSQL && (
<TabsContent value="sql" className="flex-1 overflow-hidden">
<div className="h-full bg-gray-50 -m-6 p-6">
<SQLExecutor />
</div>
</TabsContent>
)}
</Tabs>
</div>
</div>