make invisiable problem visible to super admin

This commit is contained in:
HandsomeHow 2018-11-20 09:56:54 +08:00
parent 2e5fb77947
commit 2070e372c7
2 changed files with 19 additions and 5 deletions

View File

@ -7,7 +7,7 @@ WORKDIR /app
HEALTHCHECK --interval=5s --retries=3 CMD python2 /app/deploy/health_check.py
RUN apk add --update --no-cache build-base nginx openssl curl unzip supervisor jpeg-dev zlib-dev postgresql-dev freetype-dev && \
RUN apk add --update --no-cache build-base nginx openssl curl unzip supervisor jpeg-dev zlib-dev postgresql-dev freetype-dev vim git && \
pip install --no-cache-dir -r /app/deploy/requirements.txt && \
apk del build-base --purge

View File

@ -2,6 +2,7 @@ import random
from django.db.models import Q, Count
from utils.api import APIView
from account.decorators import check_contest_permission
from account.models import AdminType
from ..models import ProblemTag, Problem, ProblemRuleType
from ..serializers import ProblemSerializer, TagSerializer, ProblemSafeSerializer
from contest.models import ContestRuleType
@ -93,11 +94,18 @@ class ContestProblemAPI(APIView):
@check_contest_permission(check_type="problems")
def get(self, request):
problem_id = request.GET.get("problem_id")
is_admin = False
if request.user.admin_type == AdminType.SUPER_ADMIN:
is_admin = True
if problem_id:
try:
problem = Problem.objects.select_related("created_by").get(_id=problem_id,
contest=self.contest,
visible=True)
if is_admin:
problem = Problem.objects.select_related("created_by").get(_id=problem_id,
contest=self.contest)
else:
problem = Problem.objects.select_related("created_by").get(_id=problem_id,
contest=self.contest,
visible=True)
except Problem.DoesNotExist:
return self.error("Problem does not exist.")
if self.contest.problem_details_permission(request.user):
@ -107,7 +115,13 @@ class ContestProblemAPI(APIView):
problem_data = ProblemSafeSerializer(problem).data
return self.success(problem_data)
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
if is_admin:
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest)
for problem in contest_problems:
if not problem.visible:
problem.title = problem.title + " ( HIDEN )"
else:
contest_problems = Problem.objects.select_related("created_by").filter(contest=self.contest, visible=True)
if self.contest.problem_details_permission(request.user):
data = ProblemSerializer(contest_problems, many=True).data
self._add_problem_status(request, data)