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

1from functools import cached_property 

2from typing import ClassVar 

3 

4from django.db.models import QuerySet 

5from django.utils.translation import gettext as _ 

6 

7from mesh.models.submission_models import Submission, SubmissionState 

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

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 

51class JournalManager(Role): 

52 """ 

53 Journal manager role. 

54 """ 

55 

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 

61 

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

63 super().__init__(user) 

64 

65 @property 

66 def active(self) -> bool: 

67 return self.user.journal_manager 

68 

69 def get_rights(self) -> JournalManagerRights: 

70 return JournalManagerRights(self.user)