Добавление папки platform_admin

This commit is contained in:
2026-01-08 22:17:22 +03:00
parent 969e49f4b5
commit 741db3a792
13 changed files with 700 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
# -*- 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)