Make portfolia viewable by all teachers of class / student

This commit is contained in:
Lorenz Padberg 2023-07-12 16:17:21 +02:00
parent d856cd9a92
commit 76fcb8b468
3 changed files with 15 additions and 14 deletions

View File

@ -16,10 +16,11 @@ class Project(TitleSlugDescriptionModel, GraphqlNodeMixin):
def __str__(self): def __str__(self):
return self.title return self.title
def is_viewable_by(self, user: User): def is_viewable_by(self, user: User) -> bool:
return user.id == self.student.id or ( # This should be filtered by self.school_class.get_teachers() but in the real data (and the test data)
self.final and self.student.get_teacher().id == user.id # school_class is always None. Like this a teacher could see project from a different class.
) teachers_ids = set([teacher.id for teacher in self.student.get_teachers()])
return user.id == self.student.id or (self.final and user.id in teachers_ids)
class ProjectEntry(models.Model): class ProjectEntry(models.Model):

View File

@ -76,13 +76,13 @@ class User(AbstractUser):
def users_in_active_school_class(self): def users_in_active_school_class(self):
return self.selected_class.users.all() if self.selected_class is not None else [] return self.selected_class.users.all() if self.selected_class is not None else []
def get_teacher(self): def get_teachers(self):
if self.is_teacher(): teachers = []
return self for school_class in self.school_classes.all():
elif self.school_classes.count() > 0: teachers.extend(school_class.get_teachers())
return self.school_classes.first().get_teacher() return teachers
else:
return None
def is_teacher(self): def is_teacher(self):
return self.user_roles.filter(role__key='teacher').exists() return self.user_roles.filter(role__key='teacher').exists()
@ -226,8 +226,8 @@ class SchoolClass(GroupWithCode, GraphqlNodeMixin):
def is_user_in_schoolclass(self, user): def is_user_in_schoolclass(self, user):
return user.is_superuser or user.school_classes.filter(pk=self.id).count() > 0 return user.is_superuser or user.school_classes.filter(pk=self.id).count() > 0
def get_teacher(self): def get_teachers(self):
return self.users.filter(user_roles__role__key='teacher').first() return list(self.users.filter(user_roles__role__key='teacher'))
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.code == '': # '' can't be unique, so we null it if self.code == '': # '' can't be unique, so we null it

View File

@ -132,7 +132,7 @@ class ModifySchoolClassTest(SkillboxTestCase):
self.assertEqual(SchoolClass.objects.count(), 3) self.assertEqual(SchoolClass.objects.count(), 3)
school_class = get_object(SchoolClass, id) school_class = get_object(SchoolClass, id)
self.assertEqual(school_class.name, class_name) self.assertEqual(school_class.name, class_name)
self.assertEqual(school_class.get_teacher(), self.teacher) self.assertEqual(school_class.get_teachers(), [self.teacher])
self.assertEqual(self.teacher.selected_class.name, class_name) self.assertEqual(self.teacher.selected_class.name, class_name)
def test_create_school_class_duplicate_name_fail(self): def test_create_school_class_duplicate_name_fail(self):