diff --git a/dbapp/mainapp/views/secret_stats.py b/dbapp/mainapp/views/secret_stats.py index 528ee0c..f4027fd 100644 --- a/dbapp/mainapp/views/secret_stats.py +++ b/dbapp/mainapp/views/secret_stats.py @@ -5,6 +5,7 @@ import json from datetime import timedelta, datetime from collections import defaultdict +from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.db.models import Count, Q, Min, Max, Avg, Sum from django.db.models.functions import TruncDate, TruncMonth, ExtractWeekDay, ExtractHour from django.utils import timezone @@ -13,7 +14,24 @@ from django.views.generic import TemplateView from ..models import ObjItem, Source, Satellite, Geo, Parameter -class SecretStatsView(TemplateView): +class AdminOnlyMixin(UserPassesTestMixin): + """Mixin to restrict access to admin role only.""" + + def test_func(self): + return ( + self.request.user.is_authenticated and + hasattr(self.request.user, 'customuser') and + self.request.user.customuser.role == 'admin' + ) + + def handle_no_permission(self): + from django.contrib import messages + from django.shortcuts import redirect + messages.error(self.request, 'Доступ запрещён. Требуется роль администратора.') + return redirect('mainapp:home') + + +class SecretStatsView(LoginRequiredMixin, AdminOnlyMixin, TemplateView): """Секретная страница статистики - итоги года в стиле Spotify Wrapped.""" template_name = 'mainapp/secret_stats.html'