feat: open teaching analytics to Teacher Admin
StuckProblems, TopACTrend, AI user analysis, and problemset user progress are now accessible to Teacher Admin (previously super-only). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -234,7 +234,7 @@ class AIDetailDataAPI(APIView):
|
|||||||
return self.error("end 格式无效,请使用 ISO 8601 格式")
|
return self.error("end 格式无效,请使用 ISO 8601 格式")
|
||||||
|
|
||||||
user = request.user
|
user = request.user
|
||||||
if username and request.user.is_super_admin():
|
if username and request.user.is_teacher_or_above():
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
@@ -444,7 +444,7 @@ class AIDurationDataAPI(APIView):
|
|||||||
username = request.GET.get("username")
|
username = request.GET.get("username")
|
||||||
|
|
||||||
user = request.user
|
user = request.user
|
||||||
if username and request.user.is_super_admin():
|
if username and request.user.is_teacher_or_above():
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
@@ -856,7 +856,7 @@ class AIHeatmapDataAPI(APIView):
|
|||||||
def get(self, request):
|
def get(self, request):
|
||||||
username = request.GET.get("username")
|
username = request.GET.get("username")
|
||||||
user = request.user
|
user = request.user
|
||||||
if username and request.user.is_super_admin():
|
if username and request.user.is_teacher_or_above():
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username)
|
user = User.objects.get(username=username)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from django.db.models import Count, Q
|
|||||||
from django.db.models.functions import ExtractYear
|
from django.db.models.functions import ExtractYear
|
||||||
from django.http import StreamingHttpResponse
|
from django.http import StreamingHttpResponse
|
||||||
|
|
||||||
from account.decorators import ensure_created_by, problem_permission_required, super_admin_required
|
from account.decorators import ensure_created_by, problem_permission_required, teacher_admin_required
|
||||||
from contest.models import Contest, ContestStatus
|
from contest.models import Contest, ContestStatus
|
||||||
from submission.models import Submission
|
from submission.models import Submission
|
||||||
from utils.api import APIError, APIView, CSRFExemptAPIView, validate_serializer
|
from utils.api import APIError, APIView, CSRFExemptAPIView, validate_serializer
|
||||||
@@ -508,7 +508,7 @@ class ProblemFlowchartAIGen(APIView):
|
|||||||
|
|
||||||
|
|
||||||
class StuckProblemsAPI(APIView):
|
class StuckProblemsAPI(APIView):
|
||||||
@super_admin_required
|
@teacher_admin_required
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
from submission.models import JudgeStatus
|
from submission.models import JudgeStatus
|
||||||
|
|
||||||
@@ -545,7 +545,7 @@ class StuckProblemsAPI(APIView):
|
|||||||
|
|
||||||
|
|
||||||
class TopACTrendAPI(APIView):
|
class TopACTrendAPI(APIView):
|
||||||
@super_admin_required
|
@teacher_admin_required
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
import datetime
|
import datetime
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from django.db.models import Avg, Count, Prefetch, Q
|
from django.db.models import Avg, Count, Prefetch, Q
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from account.decorators import admin_role_required, login_required
|
from account.decorators import login_required, teacher_admin_required
|
||||||
from account.models import User
|
from account.models import User
|
||||||
from problem.models import Problem
|
from problem.models import Problem
|
||||||
from problemset.models import (
|
from problemset.models import (
|
||||||
@@ -300,7 +300,7 @@ class ProblemSetBadgeAPI(AsyncAPIView):
|
|||||||
class ProblemSetUserProgressAPI(AsyncAPIView):
|
class ProblemSetUserProgressAPI(AsyncAPIView):
|
||||||
"""题单用户进度列表API"""
|
"""题单用户进度列表API"""
|
||||||
|
|
||||||
@admin_role_required
|
@teacher_admin_required
|
||||||
async def get(self, request, problem_set_id: int):
|
async def get(self, request, problem_set_id: int):
|
||||||
"""获取题单的用户进度列表"""
|
"""获取题单的用户进度列表"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user