diff --git a/aleksis/apps/alsijil/frontend/index.js b/aleksis/apps/alsijil/frontend/index.js index edcda144ea3165daa773dab1f7a32176e34ecc54..39499709fc53be675964649ebd4643007501aeb8 100644 --- a/aleksis/apps/alsijil/frontend/index.js +++ b/aleksis/apps/alsijil/frontend/index.js @@ -411,7 +411,7 @@ export default { iconActive: "mdi-book-education", titleKey: "alsijil.coursebook.menu_title", toolbarTitle: "alsijil.coursebook.menu_title", - permission: "core.view_calendar_feed_rule", + permission: "alsijil.view_documentations_menu_rule", }, children: [ { @@ -421,7 +421,7 @@ export default { meta: { titleKey: "alsijil.coursebook.menu_title", toolbarTitle: "alsijil.coursebook.menu_title", - permission: "core.view_calendar_feed_rule", + permission: "alsijil.view_documentations_menu_rule", fullWidth: true, }, }, diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py index f48bf498db59bb86fc8c890cd1c802b46e698da6..206cde1cf3b50e5771626a7df77e2273bac95f0e 100644 --- a/aleksis/apps/alsijil/rules.py +++ b/aleksis/apps/alsijil/rules.py @@ -13,6 +13,7 @@ from aleksis.core.util.predicates import ( from .util.predicates import ( can_edit_documentation, can_view_documentation, + can_view_any_documentation, has_lesson_group_object_perm, has_person_group_object_perm, has_personal_note_group_perm, @@ -382,6 +383,12 @@ view_documentations_for_group_predicate = has_person & ( ) add_perm("alsijil.view_documentations_for_group_rule", view_documentations_for_group_predicate) +view_documentations_menu_predicate = has_person & ( + has_global_perm("alsijil.view_documentation") + | can_view_any_documentation +) +add_perm("alsijil.view_documentations_menu_rule", view_documentations_menu_predicate) + view_documentations_for_teacher_predicate = has_person & ( has_global_perm("alsijil.view_documentation") | is_current_person ) diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py index 892d733af2f36b8c2018f70ee592919052ab8d36..d0b50940db8a3349906360584b1673b8dfd7b78a 100644 --- a/aleksis/apps/alsijil/util/predicates.py +++ b/aleksis/apps/alsijil/util/predicates.py @@ -1,6 +1,7 @@ from typing import Any, Union from django.contrib.auth.models import User +from django.db.models import Prefetch, Q from django.utils.timezone import localdate, localtime from rules import predicate @@ -417,6 +418,14 @@ def can_view_documentation(user: User, obj: Documentation): return False +@predicate +def can_view_any_documentation(user: User): + """Predicate which checks if the user is allowed to view any documentation.""" + allowed_lesson_events = LessonEvent.objects.related_to_person(user.person) + + return Documentation.objects.filter(Q(teachers=user.person) | Q(lesson_event__in=allowed_lesson_events) | Q(course__teachers=user.person)).exists() + + @predicate def can_edit_documentation(user: User, obj: Documentation): """Predicate which checks if the user is allowed to edit or delete a documentation."""