Skip to content
Snippets Groups Projects
Commit 84f98c7e authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Add permission checks for coursebook

parent f784b204
No related branches found
No related tags found
2 merge requests!352Draft: Resolve "Add dialog with each lesson's students",!350Resolve "Add simple course book list"
...@@ -16,9 +16,11 @@ from .util.predicates import ( ...@@ -16,9 +16,11 @@ from .util.predicates import (
has_lesson_group_object_perm, has_lesson_group_object_perm,
has_person_group_object_perm, has_person_group_object_perm,
has_personal_note_group_perm, has_personal_note_group_perm,
is_course_teacher,
is_group_member, is_group_member,
is_group_owner, is_group_owner,
is_group_role_assignment_group_owner, is_group_role_assignment_group_owner,
is_lesson_event_teacher,
is_lesson_original_teacher, is_lesson_original_teacher,
is_lesson_parent_group_owner, is_lesson_parent_group_owner,
is_lesson_participant, is_lesson_participant,
...@@ -360,6 +362,31 @@ view_documentation_predicate = has_person & ( ...@@ -360,6 +362,31 @@ view_documentation_predicate = has_person & (
) )
add_perm("alsijil.view_documentation_rule", view_documentation_predicate) add_perm("alsijil.view_documentation_rule", view_documentation_predicate)
view_documentations_for_course_predicate = has_person & (
has_global_perm("alsijil.view_documentation") | is_course_teacher
)
add_perm("alsijil.view_documentations_for_course_rule", view_documentations_for_course_predicate)
view_documentations_for_group_predicate = has_person & (
has_global_perm("alsijil.view_documentation") | is_group_owner
)
add_perm("alsijil.view_documentations_for_group_rule", view_documentations_for_group_predicate)
view_documentations_for_teacher_predicate = has_person & (
has_global_perm("alsijil.view_documentation") | is_current_person
)
add_perm("alsijil.view_documentations_for_teacher_rule", view_documentations_for_teacher_predicate)
add_documentation_for_course_predicate = has_person & (
has_global_perm("alsijil.add_documentation") | is_course_teacher
)
add_perm("alsijil.add_documentation_for_course_rule", add_documentation_for_course_predicate)
add_documentation_for_lesson_event_predicate = has_person & (
has_global_perm("alsijil.add_documentation") | is_lesson_event_teacher
)
add_perm("alsijil.add_documentation_for_lesson_event_rule", add_documentation_for_lesson_event_predicate)
edit_documentation_predicate = has_person & ( edit_documentation_predicate = has_person & (
has_global_perm("alsijil.change_documentation") | can_edit_documentation has_global_perm("alsijil.change_documentation") | can_edit_documentation
) )
......
from django.db.models.query_utils import Q from django.db.models.query_utils import Q
from django.core.exceptions import PermissionDenied
from datetime import datetime from datetime import datetime
import graphene import graphene
from aleksis.apps.cursus.models import Course
from aleksis.core.models import Group, Person
from aleksis.core.schema.base import FilterOrderList from aleksis.core.schema.base import FilterOrderList
from ..models import Documentation from ..models import Documentation
...@@ -39,6 +42,9 @@ class Query(graphene.ObjectType): ...@@ -39,6 +42,9 @@ class Query(graphene.ObjectType):
datetime_start = datetime.combine(date_start, datetime.min.time()) datetime_start = datetime.combine(date_start, datetime.min.time())
datetime_end = datetime.combine(date_end, datetime.max.time()) datetime_end = datetime.combine(date_end, datetime.max.time())
if (obj_type == "COURSE" and not info.context.user.has_perm("alsijil.view_documentations_for_course_rule", Course.objects.get(id=obj_id))) or (obj_type == "GROUPS" and not info.context.user.has_perm("alsijil.view_documentations_for_group_rule", Group.objects.get(id=obj_id))) or (obj_type == "TEACHER" and not info.context.user.has_perm("alsijil.view_documentations_for_teacher_rule", Person.objects.get(id=obj_id))):
raise PermissionsDenied()
return Documentation.get_for_coursebook(obj_type, obj_id, datetime_start, datetime_end, info.context) return Documentation.get_for_coursebook(obj_type, obj_id, datetime_start, datetime_end, info.context)
......
...@@ -8,6 +8,8 @@ from graphene_django_cud.mutations import ( ...@@ -8,6 +8,8 @@ from graphene_django_cud.mutations import (
) )
from guardian.shortcuts import get_objects_for_user from guardian.shortcuts import get_objects_for_user
from django.core.exceptions import PermissionDenied
from aleksis.apps.chronos.models import LessonEvent from aleksis.apps.chronos.models import LessonEvent
from aleksis.core.schema.base import ( from aleksis.core.schema.base import (
DeleteMutation, DeleteMutation,
...@@ -138,17 +140,27 @@ class DocumentationCreateOrUpdateMutation(graphene.Mutation): ...@@ -138,17 +140,27 @@ class DocumentationCreateOrUpdateMutation(graphene.Mutation):
# Sadly, we can't use the update_or_create method since create_defaults is only introduced in Django 5.0 # Sadly, we can't use the update_or_create method since create_defaults is only introduced in Django 5.0
if id.startswith("DUMMY"): if id.startswith("DUMMY"):
dummy, lesson_event_id, datetime_start, datetime_end = id.split(";") dummy, lesson_event_id, datetime_start, datetime_end = id.split(";")
lesson_event = LessonEvent.objects.get(id=lesson_event_id)
if not info.context.user.has_perm("alsijil.add_documentation_for_lesson_event_rule", lesson_event):
raise PermissionDenied()
obj = Documentation.objects.create( obj = Documentation.objects.create(
datetime_start=datetime.fromisoformat(datetime_start), datetime_start=datetime.fromisoformat(datetime_start),
datetime_end=datetime.fromisoformat(datetime_end), datetime_end=datetime.fromisoformat(datetime_end),
lesson_event=LessonEvent.objects.get(id=lesson_event_id), lesson_event=lesson_event,
course=lesson_event.course,
subject=lesson_event.subject,
topic=input.topic, topic=input.topic,
homework=input.homework, homework=input.homework,
group_note=input.group_note, group_note=input.group_note,
) # TODO: Add course & subject ) # TODO: Add course & subject
else: else:
obj = Documentation.objects.get(id=id) obj = Documentation.objects.get(id=id)
if not info.context.user.has_perm("alsijil.edit_documentation_rule", obj):
raise PermissionDenied()
obj.topic = input.topic obj.topic = input.topic
obj.homework = input.homework obj.homework = input.homework
obj.group_note = input.group_note obj.group_note = input.group_note
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment