From 2070e372c795499a02a33f03a48aceb3b479bb40 Mon Sep 17 00:00:00 2001 From: HandsomeHow <673712786@qq.com> Date: Tue, 20 Nov 2018 09:56:54 +0800 Subject: [PATCH] make invisiable problem visible to super admin --- Dockerfile | 2 +- problem/views/oj.py | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 41cabf83..0e36d00e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/problem/views/oj.py b/problem/views/oj.py index ed39dda9..258c1b34 100644 --- a/problem/views/oj.py +++ b/problem/views/oj.py @@ -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)