Files
schichtplanung/backend/apps/users/management/commands/create_admin.py
T

79 lines
3.8 KiB
Python
Raw 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.
import os
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
User = get_user_model()
class Command(BaseCommand):
help = "Erstellt einen initialen Admin-Benutzer (Superuser) sowie Basis-Qualifikationen für das Portal."
def add_arguments(self, parser):
parser.add_argument('--username', type=str, default=os.getenv('ADMIN_USERNAME', 'admin'), help='Benutzername für den Admin')
parser.add_argument('--email', type=str, default=os.getenv('ADMIN_EMAIL', 'admin@local.host'), help='E-Mail-Adresse für den Admin')
parser.add_argument('--password', type=str, default=os.getenv('ADMIN_PASSWORD', 'adminpassword'), help='Passwort für den Admin')
def handle(self, *args, **options):
has_existing_admin = User.objects.filter(is_superuser=True).exists() or User.objects.filter(is_admin_user=True).exists()
explicit_env_set = bool(os.getenv('ADMIN_USERNAME') or os.getenv('ADMIN_EMAIL'))
if has_existing_admin and not explicit_env_set and not os.getenv('FORCE_CREATE_ADMIN'):
self.stdout.write(self.style.SUCCESS("️ Mindestens ein Admin-Benutzer existiert bereits. Es wurde kein neuer Standard-Admin ('admin@local.host') erstellt."))
else:
username = options['username'] or os.getenv('ADMIN_USERNAME', 'admin')
email = options['email'] or os.getenv('ADMIN_EMAIL', 'admin@local.host')
password = options['password'] or os.getenv('ADMIN_PASSWORD', 'adminpassword')
# 1. Admin User
user, created = User.objects.get_or_create(
username=username,
defaults={'email': email}
)
if created:
user.set_password(password)
user.is_superuser = True
user.is_staff = True
user.is_admin_user = True
user.is_approved = True
user.is_email_verified = True
user.is_active = True
user.save()
self.stdout.write(self.style.SUCCESS(f"✅ Initialer Admin '{username}' ({email}) wurde erstellt! Passwort: {password}"))
else:
changed = False
if not user.is_superuser or not user.is_admin_user or not user.is_approved or not user.is_active:
user.is_superuser = True
user.is_staff = True
user.is_admin_user = True
user.is_approved = True
user.is_active = True
changed = True
if os.getenv('ADMIN_PASSWORD'):
user.set_password(password)
changed = True
if changed:
user.save()
self.stdout.write(self.style.SUCCESS(f"✅ Admin-Rechte für bestehenden Benutzer '{username}' wurden aktualisiert."))
else:
self.stdout.write(self.style.SUCCESS(f"️ Admin-Benutzer '{username}' existiert bereits."))
# 2. Initial Base Skills
try:
from apps.events.models import Skill
Skill.objects.get_or_create(
name="Ersthelfer",
defaults={'description': 'Gültiger Erste-Hilfe-Schein', 'color': '#ef4444'}
)
Skill.objects.get_or_create(
name="Bar-Erfahrung",
defaults={'description': 'Erfahrung an der Zapfanlage', 'color': '#3b82f6'}
)
Skill.objects.get_or_create(
name="Führerschein B",
defaults={'description': 'PKW / Transporter fahren', 'color': '#10b981'}
)
except Exception as e:
self.stderr.write(self.style.WARNING(f"Hinweis zu Skills: {e}"))