From 5675ce4f122e700ea9b8ab25df3429ae38e3cd53 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Tue, 9 Apr 2024 00:54:47 +0200 Subject: [PATCH] Add coursebook menu rule --- aleksis/apps/alsijil/frontend/index.js | 4 ++-- aleksis/apps/alsijil/rules.py | 7 +++++++ aleksis/apps/alsijil/util/predicates.py | 9 +++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/index.js b/aleksis/apps/alsijil/frontend/index.js index edcda144e..39499709f 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 f48bf498d..206cde1cf 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 892d733af..d0b50940d 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.""" -- GitLab