QueryBuilder/migrate_admin.py
DGSoft f176560c02 Add comprehensive admin panel with user management
Features added:
- Admin authentication system with is_admin field
- Complete admin dashboard with user statistics
- User management (create, edit, delete, toggle admin)
- Protected admin routes with @admin_required decorator
- Security features (prevent self-deletion, last admin protection)
- Responsive admin UI with Bootstrap integration
- Database migration script for admin field
- Admin navigation link for authorized users

Technical improvements:
- Enhanced 3-column dashboard layout (tables | editor | saved queries)
- Removed plus button and made right sidebar more compact
- Admin user (admin/admin123) automatically created with admin privileges
- Full CRUD operations for user management
- Flash messages for user feedback
- Form validation and error handling
2025-10-14 21:33:11 +02:00

84 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Migrations-Skript um das is_admin Feld zur User-Tabelle hinzuzufügen
"""
import sqlite3
import os
from pathlib import Path
def migrate_database():
"""Fügt das is_admin Feld zur User-Tabelle hinzu"""
# Finde die Datenbankdatei
possible_paths = [
'querybuilder.db',
'instance/querybuilder.db',
Path(__file__).parent / 'querybuilder.db',
Path(__file__).parent / 'instance' / 'querybuilder.db'
]
db_path = None
for path in possible_paths:
if os.path.exists(path):
db_path = path
break
if not db_path:
print("❌ Keine Datenbankdatei gefunden!")
return False
print(f"📁 Verwende Datenbank: {db_path}")
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Prüfe ob Spalte bereits existiert
cursor.execute("PRAGMA table_info(user)")
columns = [row[1] for row in cursor.fetchall()]
if 'is_admin' in columns:
print("✅ Spalte 'is_admin' existiert bereits!")
# Setze den ersten User (admin) als Administrator
cursor.execute("UPDATE user SET is_admin = 1 WHERE username = 'admin'")
if cursor.rowcount > 0:
print("✅ Admin-User wurde als Administrator markiert!")
conn.commit()
conn.close()
return True
# Füge is_admin Spalte hinzu
print(" Füge 'is_admin' Spalte hinzu...")
cursor.execute("ALTER TABLE user ADD COLUMN is_admin BOOLEAN NOT NULL DEFAULT 0")
# Setze den ersten User (admin) als Administrator
cursor.execute("UPDATE user SET is_admin = 1 WHERE username = 'admin'")
admin_updated = cursor.rowcount > 0
conn.commit()
conn.close()
print("✅ Migration erfolgreich abgeschlossen!")
if admin_updated:
print("✅ Admin-User wurde als Administrator markiert!")
else:
print("⚠️ Kein Admin-User gefunden - wird beim nächsten Start erstellt")
return True
except Exception as e:
print(f"❌ Fehler bei der Migration: {e}")
return False
if __name__ == "__main__":
print("🔄 Starte Datenbank-Migration...")
success = migrate_database()
if success:
print("\n🎉 Migration abgeschlossen!")
print("Der Admin-User kann jetzt auf das Admin-Panel zugreifen.")
else:
print("\n💥 Migration fehlgeschlagen!")
print("Bitte überprüfen Sie die Fehlermeldungen oben.")