Coverage for src/mesh/model/roles/journal_manager.py: 97%
35 statements
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-28 07:45 +0000
« prev ^ index » next coverage.py v7.7.0, created at 2025-04-28 07:45 +0000
1from functools import cached_property
2from typing import ClassVar
4from django.db.models import QuerySet
5from django.utils.translation import gettext as _
7from mesh.models.submission_models import Submission, SubmissionState
8from mesh.models.user_models import User
10from .base_role import Role
11from .editor import EditorRights
14class JournalManagerRights(EditorRights):
15 """
16 Rights implementation for Journal manager role.
17 """
19 @cached_property
20 def managed_submissions(self) -> QuerySet[Submission]:
21 """
22 Block access to non-submitted submissions.
23 """
24 return Submission.objects.get_submissions().exclude(state=SubmissionState.OPENED.value)
26 @cached_property
27 def submissions(self) -> QuerySet[Submission]:
28 """
29 Block access to non-submitted submissions.
30 """
31 return self.managed_submissions
33 @cached_property
34 def managed_users(self) -> QuerySet[User]:
35 """
36 Can impersonate anyone except admin users.
37 """
38 return (
39 User.objects.exclude(pk=self.user.pk)
40 .exclude(is_superuser=True)
41 .exclude(journal_manager=True)
42 )
44 def can_edit_journal_sections(self) -> bool:
45 return True
47 def can_access_shortcut_actions(self) -> bool:
48 return True
51class JournalManager(Role):
52 """
53 Journal manager role.
54 """
56 _CODE: ClassVar[str] = "journal_manager"
57 _NAME: ClassVar[str] = _("Journal manager")
58 _ICON_CLASS: ClassVar[str] = "fa-newspaper"
59 _SUBMISSION_LIST_TITLE: ClassVar[str] = _("All submissions")
60 rights: JournalManagerRights
62 def __init__(self, user: User) -> None:
63 super().__init__(user)
65 @property
66 def active(self) -> bool:
67 return self.user.journal_manager
69 def get_rights(self) -> JournalManagerRights:
70 return JournalManagerRights(self.user)