From 338bad1e83c0bc4ffd6eb9313b02f729315ffa6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodor=20M=C3=A1t=C3=A9?= <bodor.mate@kszk.bme.hu> Date: Mon, 14 Jan 2019 20:17:45 +0100 Subject: [PATCH] Validate document end solution --- src/common/permissions.py | 8 -------- .../migrations/0004_auto_20190114_2016.py | 18 ++++++++++++++++++ src/document/models.py | 2 +- src/document/serializers.py | 7 +++++++ .../migrations/0006_auto_20190114_1938.py | 18 ++++++++++++++++++ src/homework/models.py | 6 +++--- src/homework/serializers.py | 10 ++++------ src/homework/views.py | 3 +-- 8 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 src/document/migrations/0004_auto_20190114_2016.py create mode 100644 src/homework/migrations/0006_auto_20190114_1938.py diff --git a/src/common/permissions.py b/src/common/permissions.py index beaae6f..7d2384c 100644 --- a/src/common/permissions.py +++ b/src/common/permissions.py @@ -28,11 +28,3 @@ class IsStaffOrStudent(BasePermission): def has_permission(self, request, view): return request.user.is_authenticated and\ (request.user.profile.role == 'Staff' or request.user.profile.role == 'Student') - - -class StudentJustCreate(BasePermission): - def has_permission(self, request, view): - if request.user.is_authenticated and request.user.profile.role == 'Staff': - return True - return request.user.is_authenticated and request.user.profile.role == 'Student' and\ - (request.method in SAFE_METHODS or request.method == 'CREATE') diff --git a/src/document/migrations/0004_auto_20190114_2016.py b/src/document/migrations/0004_auto_20190114_2016.py new file mode 100644 index 0000000..fa317ee --- /dev/null +++ b/src/document/migrations/0004_auto_20190114_2016.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2019-01-14 19:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('document', '0003_document_solution'), + ] + + operations = [ + migrations.AlterField( + model_name='document', + name='description', + field=models.TextField(blank=True, default=''), + ), + ] diff --git a/src/document/models.py b/src/document/models.py index 0d5d5f8..862ec5e 100644 --- a/src/document/models.py +++ b/src/document/models.py @@ -10,7 +10,7 @@ class Document(models.Model): uploaded_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING) uploaded_at = models.DateTimeField(auto_now_add=True, editable=False) name = models.CharField(max_length=150) - description = models.TextField() + description = models.TextField(blank=True, default='', ) file = models.FileField( validators=[ validators.FileExtensionValidator([ diff --git a/src/document/serializers.py b/src/document/serializers.py index cea73e3..00f7f78 100644 --- a/src/document/serializers.py +++ b/src/document/serializers.py @@ -2,6 +2,7 @@ from rest_framework import serializers from common.serializers import CurrentUserProfileDefault from . import models +from common.middleware import CurrentUserMiddleware class DocumentSerializer(serializers.ModelSerializer): @@ -14,3 +15,9 @@ class DocumentSerializer(serializers.ModelSerializer): def get_uploaded_by_name(self, obj): return obj.uploaded_by.full_name + + def validate(self, data): + profile = CurrentUserMiddleware.get_current_user_profile() + if data['solution'] not in profile.solution.all(): + raise serializers.ValidationError('You dont have permission!') + return data diff --git a/src/homework/migrations/0006_auto_20190114_1938.py b/src/homework/migrations/0006_auto_20190114_1938.py new file mode 100644 index 0000000..02e2316 --- /dev/null +++ b/src/homework/migrations/0006_auto_20190114_1938.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.1 on 2019-01-14 18:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('homework', '0005_auto_20190114_1658'), + ] + + operations = [ + migrations.AlterField( + model_name='solution', + name='note', + field=models.TextField(blank=True, default=''), + ), + ] diff --git a/src/homework/models.py b/src/homework/models.py index 2f3e785..6e1147c 100755 --- a/src/homework/models.py +++ b/src/homework/models.py @@ -28,9 +28,9 @@ class Solution(models.Model): on_delete=models.DO_NOTHING, default=CurrentUserMiddleware.get_current_user_profile, ) - created_at = models.DateTimeField(auto_now_add=True, editable=False) - updated_at = models.DateTimeField(auto_now=True, editable=False) - note = models.TextField() + created_at = models.DateTimeField(auto_now_add=True, editable=False,) + updated_at = models.DateTimeField(auto_now=True, editable=False,) + note = models.TextField(blank=True, default='',) accepted = models.BooleanField() corrected = models.BooleanField() diff --git a/src/homework/serializers.py b/src/homework/serializers.py index 595260d..0e5191f 100755 --- a/src/homework/serializers.py +++ b/src/homework/serializers.py @@ -3,6 +3,7 @@ from django.utils import timezone from common.serializers import CurrentUserProfileDefault from . import models +from common.middleware import CurrentUserMiddleware class TaskSerializer(serializers.ModelSerializer): @@ -35,10 +36,7 @@ class SolutionSerializer(serializers.ModelSerializer): def validate(self, data): if timezone.now() > data['task'].deadline: raise serializers.ValidationError('You late.') + profile = CurrentUserMiddleware.get_current_user_profile() + if profile.role != 'Staff' and (data['accepted'] or data['corrected'] or data['note'] != ''): + raise serializers.ValidationError("You don't have permission!") return data - - def create(self, validated_data): - validated_data['accepted'] = False - validated_data['corrected'] = False - validated_data['note'] = '' - return self.Meta.model.objects.create(**validated_data) diff --git a/src/homework/views.py b/src/homework/views.py index 2570786..db3c92a 100755 --- a/src/homework/views.py +++ b/src/homework/views.py @@ -1,6 +1,5 @@ from rest_framework import viewsets -from rest_framework.permissions import IsAuthenticated from . import serializers from . import models from common import permissions @@ -14,7 +13,7 @@ class TasksViewSet(viewsets.ModelViewSet): class SolutionsViewSet(viewsets.ModelViewSet): serializer_class = serializers.SolutionSerializer - permission_classes = (permissions.IsStaffOrStudent, permissions.StudentJustCreate) + permission_classes = (permissions.IsStaffOrStudent, ) def get_queryset(self): user = self.request.user -- GitLab