This commit is contained in:
Ross
2021-08-31 22:09:24 +01:00
parent c6e01a0cb7
commit 18b0be55cd
5 changed files with 41 additions and 9 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<h2>{{ exam.name }}</h2> <h2>{{ exam.name }}</h2>
{% if unmarked %} {% if unmarked %}
<div class="alert alert-info" role="alert"> <div class="alert alert-warning" role="alert">
The following questions need marking The following questions need marking
{% for exam_index in unmarked %} {% for exam_index in unmarked %}
<a href="{% url 'anatomy:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a> <a href="{% url 'anatomy:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a>
+32
View File
@@ -1,6 +1,17 @@
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from .models import Long, LongSeries from .models import Long, LongSeries
def user_is_author_or_long_series_checker_or_long_marker(function):
def wrap(request, *args, **kwargs):
series = LongSeries.objects.get(pk=kwargs['pk'])
if request.user in series.get_author_objects() or request.user.groups.filter(name='long_checker').exists() or request.user.groups.filter(name='long_marker').exists() or request.user.is_superuser:
return function(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
def user_is_author_or_long_series_checker(function): def user_is_author_or_long_series_checker(function):
def wrap(request, *args, **kwargs): def wrap(request, *args, **kwargs):
series = LongSeries.objects.get(pk=kwargs['pk']) series = LongSeries.objects.get(pk=kwargs['pk'])
@@ -12,6 +23,17 @@ def user_is_author_or_long_series_checker(function):
wrap.__name__ = function.__name__ wrap.__name__ = function.__name__
return wrap return wrap
def user_is_author_or_long_checker_or_long_marker(function):
def wrap(request, *args, **kwargs):
long = Long.objects.get(pk=kwargs['pk'])
if request.user in long.author.all() or request.user.groups.filter(name='long_checker').exists() or request.user.groups.filter(name='long_marker').exists() or request.user.is_superuser:
return function(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
def user_is_author_or_long_checker(function): def user_is_author_or_long_checker(function):
def wrap(request, *args, **kwargs): def wrap(request, *args, **kwargs):
long = Long.objects.get(pk=kwargs['pk']) long = Long.objects.get(pk=kwargs['pk'])
@@ -31,4 +53,14 @@ def user_is_long_checker(function):
raise PermissionDenied raise PermissionDenied
wrap.__doc__ = function.__doc__ wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__ wrap.__name__ = function.__name__
return wrap
def user_is_long_marker(function):
def wrap(request, *args, **kwargs):
if request.user.groups.filter(name='long_marker').exists() or request.user.is_superuser:
return function(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap return wrap
+1 -1
View File
@@ -5,7 +5,7 @@
<h2>{{ exam.name }}</h2> <h2>{{ exam.name }}</h2>
{% if unmarked %} {% if unmarked %}
<div class="alert alert-info" role="alert"> <div class="alert alert-warning" role="alert">
The following questions need marking The following questions need marking
{% for exam_index in unmarked %} {% for exam_index in unmarked %}
<a href="{% url 'longs:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a> <a href="{% url 'longs:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a>
+6 -6
View File
@@ -42,7 +42,7 @@ from .filters import LongFilter, LongSeriesFilter, UserAnswerFilter
from django_tables2 import SingleTableView, SingleTableMixin from django_tables2 import SingleTableView, SingleTableMixin
from django_filters.views import FilterView from django_filters.views import FilterView
from .decorators import user_is_author_or_long_checker, user_is_long_checker, user_is_author_or_long_series_checker from .decorators import user_is_author_or_long_checker, user_is_author_or_long_checker_or_long_marker, user_is_author_or_long_series_checker_or_long_marker, user_is_long_checker, user_is_author_or_long_series_checker, user_is_long_marker, user_is_author_or_long_checker_or_long_marker
from collections import defaultdict from collections import defaultdict
import json import json
@@ -97,7 +97,7 @@ class AuthorOrCheckerRequiredMixin(object):
@login_required @login_required
@user_is_author_or_long_checker @user_is_author_or_long_checker_or_long_marker
def question_detail(request, pk): def question_detail(request, pk):
long = get_object_or_404(Long, pk=pk) long = get_object_or_404(Long, pk=pk)
@@ -109,7 +109,7 @@ def question_detail(request, pk):
return render(request, "longs/question_detail.html", {"question": long}) return render(request, "longs/question_detail.html", {"question": long})
@login_required @login_required
@user_is_author_or_long_series_checker @user_is_author_or_long_series_checker_or_long_marker
def long_series_detail(request, pk): def long_series_detail(request, pk):
series = get_object_or_404(LongSeries, pk=pk) series = get_object_or_404(LongSeries, pk=pk)
@@ -637,7 +637,7 @@ def loadJsonAnswer(answer):
@login_required @login_required
@user_is_long_checker @user_is_long_marker
@reversion.create_revision() @reversion.create_revision()
def mark_answer(request, pk, sk, tk): def mark_answer(request, pk, sk, tk):
exam = get_object_or_404(Exam, pk=pk) exam = get_object_or_404(Exam, pk=pk)
@@ -710,7 +710,7 @@ def mark_answer(request, pk, sk, tk):
# @user_passes_test(user_is_admin, login_url="/accounts/login") # @user_passes_test(user_is_admin, login_url="/accounts/login")
@login_required @login_required
@user_is_long_checker @user_is_long_marker
def mark(request, pk, sk): def mark(request, pk, sk):
exam = get_object_or_404(Exam, pk=pk) exam = get_object_or_404(Exam, pk=pk)
@@ -747,7 +747,7 @@ def mark(request, pk, sk):
@login_required @login_required
@user_is_long_checker @user_is_long_marker
def exam_scores_cid(request, pk): def exam_scores_cid(request, pk):
exam = get_object_or_404(Exam, pk=pk) exam = get_object_or_404(Exam, pk=pk)
+1 -1
View File
@@ -6,7 +6,7 @@
<h2>{{ exam.name }}</h2> <h2>{{ exam.name }}</h2>
{% if unmarked %} {% if unmarked %}
<div class="alert alert-info" role="alert"> <div class="alert alert-warning" role="alert">
The following questions need marking The following questions need marking
{% for exam_index in unmarked %} {% for exam_index in unmarked %}
<a href="{% url 'rapids:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a> <a href="{% url 'rapids:mark' exam.pk exam_index %}">{{ exam_index|add:1 }}</a>