修改较多,涉及到小组管理员对比赛的管理,小组管理员可以看到他管理的小组的其他管理员创建的比赛,但看不到别人的题目,但是可以从前台看到比赛的题目,可以在比赛开始前测试题目
This commit is contained in:
@@ -8,7 +8,7 @@ from django.core.urlresolvers import reverse
|
|||||||
|
|
||||||
from utils.shortcuts import error_response, error_page
|
from utils.shortcuts import error_response, error_page
|
||||||
|
|
||||||
from account.models import SUPER_ADMIN
|
from account.models import SUPER_ADMIN, ADMIN
|
||||||
from .models import (Contest, PASSWORD_PROTECTED_CONTEST, PASSWORD_PROTECTED_GROUP_CONTEST, PUBLIC_CONTEST, GROUP_CONTEST,
|
from .models import (Contest, PASSWORD_PROTECTED_CONTEST, PASSWORD_PROTECTED_GROUP_CONTEST, PUBLIC_CONTEST, GROUP_CONTEST,
|
||||||
CONTEST_ENDED, CONTEST_NOT_START, CONTEST_UNDERWAY)
|
CONTEST_ENDED, CONTEST_NOT_START, CONTEST_UNDERWAY)
|
||||||
|
|
||||||
@@ -57,7 +57,10 @@ def check_user_contest_permission(func):
|
|||||||
|
|
||||||
if request.user.admin_type == SUPER_ADMIN or request.user == contest.created_by:
|
if request.user.admin_type == SUPER_ADMIN or request.user == contest.created_by:
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
|
if request.user.admin_type == ADMIN:
|
||||||
|
contest_set = Contest.objects.filter(groups__in=request.user.managed_groups.all())
|
||||||
|
if contest in contest_set:
|
||||||
|
return func(*args, **kwargs)
|
||||||
# 管理员可见隐藏的比赛,已经先判断了身份
|
# 管理员可见隐藏的比赛,已经先判断了身份
|
||||||
if not contest.visible:
|
if not contest.visible:
|
||||||
if request.is_ajax():
|
if request.is_ajax():
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from utils.shortcuts import (serializer_invalid_response, error_response,
|
|||||||
success_response, paginate, error_page, paginate_data)
|
success_response, paginate, error_page, paginate_data)
|
||||||
from account.models import SUPER_ADMIN, User
|
from account.models import SUPER_ADMIN, User
|
||||||
from account.decorators import login_required, super_admin_required
|
from account.decorators import login_required, super_admin_required
|
||||||
from group.models import Group
|
from group.models import Group, AdminGroupRelation, UserGroupRelation
|
||||||
from utils.cache import get_cache_redis
|
from utils.cache import get_cache_redis
|
||||||
from submission.models import Submission
|
from submission.models import Submission
|
||||||
from problem.models import Problem
|
from problem.models import Problem
|
||||||
@@ -91,7 +91,9 @@ class ContestAdminAPIView(APIView):
|
|||||||
try:
|
try:
|
||||||
# 超级管理员可以编辑所有的
|
# 超级管理员可以编辑所有的
|
||||||
contest = Contest.objects.get(id=data["id"])
|
contest = Contest.objects.get(id=data["id"])
|
||||||
if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user:
|
if request.user.admin_type != SUPER_ADMIN:
|
||||||
|
contest_set = Contest.objects.filter(groups__in=request.user.managed_groups.all())
|
||||||
|
if contest not in contest_set:
|
||||||
return error_response(u"无权访问!")
|
return error_response(u"无权访问!")
|
||||||
except Contest.DoesNotExist:
|
except Contest.DoesNotExist:
|
||||||
return error_response(u"该比赛不存在!")
|
return error_response(u"该比赛不存在!")
|
||||||
@@ -151,16 +153,18 @@ class ContestAdminAPIView(APIView):
|
|||||||
# 普通管理员只能获取自己创建的题目
|
# 普通管理员只能获取自己创建的题目
|
||||||
# 超级管理员可以获取全部的题目
|
# 超级管理员可以获取全部的题目
|
||||||
contest = Contest.objects.get(id=contest_id)
|
contest = Contest.objects.get(id=contest_id)
|
||||||
if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user:
|
if request.user.admin_type != SUPER_ADMIN:
|
||||||
return error_response(u"题目不存在")
|
contest_set = Contest.objects.filter(groups__in=request.user.managed_groups.all())
|
||||||
|
if contest not in contest_set:
|
||||||
|
return error_response(u"比赛不存在")
|
||||||
return success_response(ContestSerializer(contest).data)
|
return success_response(ContestSerializer(contest).data)
|
||||||
except Contest.DoesNotExist:
|
except Contest.DoesNotExist:
|
||||||
return error_response(u"题目不存在")
|
return error_response(u"比赛不存在")
|
||||||
|
|
||||||
if request.user.admin_type == SUPER_ADMIN:
|
if request.user.admin_type == SUPER_ADMIN:
|
||||||
contest = Contest.objects.all().order_by("-create_time")
|
contest = Contest.objects.all().order_by("-create_time")
|
||||||
else:
|
else:
|
||||||
contest = Contest.objects.filter(created_by=request.user).order_by("-create_time")
|
contest = Contest.objects.filter(groups__in=request.user.managed_groups.all()).distinct().order_by("-create_time")
|
||||||
visible = request.GET.get("visible", None)
|
visible = request.GET.get("visible", None)
|
||||||
if visible:
|
if visible:
|
||||||
contest = contest.filter(visible=(visible == "true"))
|
contest = contest.filter(visible=(visible == "true"))
|
||||||
@@ -184,7 +188,9 @@ class ContestProblemAdminAPIView(APIView):
|
|||||||
data = serializer.data
|
data = serializer.data
|
||||||
try:
|
try:
|
||||||
contest = Contest.objects.get(id=data["contest_id"])
|
contest = Contest.objects.get(id=data["contest_id"])
|
||||||
if request.user.admin_type != SUPER_ADMIN and contest.created_by != request.user:
|
if request.user.admin_type != SUPER_ADMIN:
|
||||||
|
contest_set = Contest.objects.filter(groups__in=request.user.managed_groups.all())
|
||||||
|
if contest not in contest_set:
|
||||||
return error_response(u"比赛不存在")
|
return error_response(u"比赛不存在")
|
||||||
except Contest.DoesNotExist:
|
except Contest.DoesNotExist:
|
||||||
return error_response(u"比赛不存在")
|
return error_response(u"比赛不存在")
|
||||||
@@ -362,7 +368,10 @@ def contest_problem_page(request, contest_id, contest_problem_id):
|
|||||||
request.user.admin_type == SUPER_ADMIN or \
|
request.user.admin_type == SUPER_ADMIN or \
|
||||||
request.user == contest.created_by:
|
request.user == contest.created_by:
|
||||||
show_submit_code_area = True
|
show_submit_code_area = True
|
||||||
|
else:
|
||||||
|
contest_set = Contest.objects.filter(groups__in=request.user.managed_groups.all())
|
||||||
|
if contest in contest_set:
|
||||||
|
show_submit_code_area = True
|
||||||
return render(request, "oj/problem/contest_problem.html", {"problem": problem,
|
return render(request, "oj/problem/contest_problem.html", {"problem": problem,
|
||||||
"contest": contest,
|
"contest": contest,
|
||||||
"samples": json.loads(problem.samples),
|
"samples": json.loads(problem.samples),
|
||||||
|
|||||||
Reference in New Issue
Block a user