76 lines
2.9 KiB
Python
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)
|