Files

76 lines
2.9 KiB
Python

# -*- coding: utf-8 -*-
"""
Views для аутентификации администраторов платформы.
"""
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout
from django.contrib import messages
from django.db import connection
from .forms import PlatformAdminLoginForm
from .models import PlatformAdmin
def platform_login_view(request):
"""
Страница входа для администраторов платформы.
Доступна только на public домене.
"""
# Проверяем что мы на public домене
schema_name = getattr(connection, 'schema_name', 'public')
if schema_name != 'public':
messages.error(request, 'Вход для администраторов платформы доступен только на главном домене.')
return redirect('/')
# Если пользователь уже залогинен как PlatformAdmin
if request.user.is_authenticated and isinstance(request.user, PlatformAdmin):
return redirect('platform_admin:dashboard')
if request.method == 'POST':
form = PlatformAdminLoginForm(request, data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user, backend='platform_admin.backends.PlatformAdminBackend')
messages.success(request, f'Добро пожаловать, {user.name}!')
next_url = request.GET.get('next')
if next_url:
return redirect(next_url)
return redirect('platform_admin:dashboard')
else:
form = PlatformAdminLoginForm(request)
return render(request, 'platform_admin/login.html', {'form': form})
def platform_logout_view(request):
"""
Выход администратора платформы.
"""
logout(request)
messages.info(request, 'Вы вышли из системы.')
return redirect('platform_admin:login')
def dashboard_view(request):
"""
Главная страница панели администратора платформы.
Показывает статистику по тенантам, заявкам и подпискам.
"""
# Проверяем что пользователь - PlatformAdmin
if not request.user.is_authenticated or not isinstance(request.user, PlatformAdmin):
return redirect('platform_admin:login')
from tenants.models import Client, TenantRegistration, Subscription
context = {
'total_tenants': Client.objects.exclude(schema_name='public').count(),
'active_tenants': Client.objects.filter(is_active=True).exclude(schema_name='public').count(),
'pending_registrations': TenantRegistration.objects.filter(status='pending').count(),
'active_subscriptions': Subscription.objects.filter(is_active=True).count(),
}
return render(request, 'platform_admin/dashboard.html', context)