Coverage for src / mesh / model / roles / journal_manager.py: 97%

37 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-03-10 09:11 +0000

1from typing import ClassVar 

2 

3from django.db.models import QuerySet 

4from django.utils.functional import cached_property 

5from django.utils.translation import gettext as _ 

6 

7from mesh.models.submission_models import Submission 

8from mesh.models.user_models import User 

9 

10from .base_role import Role 

11from .editor import EditorRights 

12 

13 

14class JournalManagerRights(EditorRights): 

15 """ 

16 Rights implementation for Journal manager role. 

17 """ 

18 

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) 

25 

26 @cached_property 

27 def submissions(self) -> QuerySet[Submission]: 

28 """ 

29 Block access to non-submitted submissions. 

30 """ 

31 return self.managed_submissions 

32 

33 @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 ) 

43 

44 def can_edit_journal_sections(self) -> bool: 

45 return True 

46 

47 def can_access_shortcut_actions(self) -> bool: 

48 return True 

49 

50 def can_manage_submission(self, submission: Submission) -> bool: 

51 return True 

52 

53 

54class JournalManager(Role): 

55 """ 

56 Journal manager role. 

57 """ 

58 

59 _CODE: ClassVar[str] = "journal_manager" 

60 _NAME: ClassVar[str] = _("Journal manager") 

61 _ICON_CLASS: ClassVar[str] = "fa-newspaper" 

62 _SUBMISSION_LIST_TITLE: ClassVar[str] = _("All submissions") 

63 rights: JournalManagerRights 

64 

65 def __init__(self, user: User) -> None: 

66 super().__init__(user) 

67 

68 @property 

69 def active(self) -> bool: 

70 return self.user.journal_manager 

71 

72 def get_rights(self) -> JournalManagerRights: 

73 return JournalManagerRights(self.user)