Coverage for rfpy/auth/roles.py: 100%
10 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-24 10:52 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-24 10:52 +0000
1from collections import defaultdict
4from rfpy.auth import perms
6_builtin_roles = {
7 "Administrator": {
8 perms.ALLOCATE_QUESTIONS,
9 perms.ANSWER_QUESTIONS_ALLOCATED_TO_ANYONE,
10 perms.APPROVE_ANSWERS,
11 perms.ISSUE_ACCEPT,
12 perms.ISSUE_ADD_ANSWER_COMMENT,
13 perms.ISSUE_CREATE,
14 perms.ISSUE_DECLINE,
15 perms.ISSUE_DELETE,
16 perms.ISSUE_MANAGE_ISSUER_ATTACHMENTS,
17 perms.ISSUE_MANAGE_RESPONDENT_ATTACHMENTS,
18 perms.ISSUE_PUBLISH,
19 perms.ISSUE_RETRACT,
20 perms.ISSUE_SAVE_AGREED_SCORES,
21 perms.ISSUE_SAVE_QUESTION_RESPONSE,
22 perms.ISSUE_SAVE_SCORES,
23 perms.ISSUE_SELF_ISSUE,
24 perms.ISSUE_SET_AWARD_STATUS,
25 perms.ISSUE_SUBMIT,
26 perms.ISSUE_UPDATE,
27 perms.ISSUE_UPDATE_WORKFLOW,
28 perms.ISSUE_VIEW_ANSWERS,
29 perms.ISSUE_VIEW_AGREED_SCORES,
30 perms.ISSUE_VIEW_SCORES,
31 perms.ISSUE_VIEW_WINLOSS,
32 perms.LIST_AUDIT_EVENTS,
33 perms.MANAGE_ORGANISATION,
34 perms.MANAGE_PRIVATE_ADDRESS_BOOK,
35 perms.MANAGE_ROLES,
36 perms.MANAGE_USERS,
37 perms.PROJECT_ACCESS,
38 perms.PROJECT_ADD_NOTE,
39 perms.PROJECT_ADD_RESPONDENT_NOTE,
40 perms.PROJECT_CLOSE,
41 perms.PROJECT_CREATE,
42 perms.PROJECT_CREATE_ON_BEHALF,
43 perms.PROJECT_DELETE,
44 perms.PROJECT_EDIT,
45 perms.PROJECT_EDIT_COSMETIC,
46 perms.PROJECT_EDIT_WEIGHTING,
47 perms.PROJECT_EXPORT_COMPLETE,
48 perms.PROJECT_IMPORT_COMPLETE,
49 perms.PROJECT_LOCK_QUESTIONNAIRE,
50 perms.PROJECT_MANAGE_ROLES,
51 perms.PROJECT_PUBLISH,
52 perms.PROJECT_REVERT_TO_DRAFT,
53 perms.PROJECT_SAVE_QUESTIONNAIRE,
54 perms.PROJECT_VIEW_QUESTIONNAIRE,
55 perms.PROJECT_VIEW_WEIGHTING,
56 },
57 "Project Scorer": {
58 perms.ISSUE_SAVE_AGREED_SCORES,
59 perms.ISSUE_SAVE_SCORES,
60 perms.ISSUE_VIEW_AGREED_SCORES,
61 perms.ISSUE_VIEW_SCORES,
62 perms.ISSUE_VIEW_ANSWERS,
63 perms.PROJECT_ACCESS,
64 perms.PROJECT_ADD_NOTE,
65 perms.PROJECT_VIEW_QUESTIONNAIRE,
66 perms.PROJECT_VIEW_WEIGHTING,
67 },
68 "Restricted Scorer": {
69 perms.ISSUE_SAVE_AGREED_SCORES,
70 perms.ISSUE_SAVE_SCORES,
71 perms.ISSUE_VIEW_AGREED_SCORES,
72 perms.ISSUE_VIEW_SCORES,
73 perms.ISSUE_VIEW_ANSWERS,
74 perms.PROJECT_ACCESS,
75 perms.PROJECT_ADD_NOTE,
76 perms.PROJECT_VIEW_QUESTIONNAIRE,
77 },
78 "Respondent": {
79 perms.ISSUE_SAVE_QUESTION_RESPONSE,
80 perms.ISSUE_VIEW_ANSWERS,
81 perms.PROJECT_ADD_RESPONDENT_NOTE,
82 },
83 "Response Reviewer": {
84 perms.ALLOCATE_QUESTIONS,
85 perms.ANSWER_QUESTIONS_ALLOCATED_TO_ANYONE,
86 perms.APPROVE_ANSWERS,
87 perms.ISSUE_MANAGE_RESPONDENT_ATTACHMENTS,
88 perms.ISSUE_SAVE_QUESTION_RESPONSE,
89 perms.ISSUE_VIEW_ANSWERS,
90 perms.ISSUE_UPDATE,
91 perms.LIST_AUDIT_EVENTS,
92 perms.PROJECT_ADD_RESPONDENT_NOTE,
93 },
94 "Response Manager": {
95 perms.ALLOCATE_QUESTIONS,
96 perms.ANSWER_QUESTIONS_ALLOCATED_TO_ANYONE,
97 perms.APPROVE_ANSWERS,
98 perms.ISSUE_ACCEPT,
99 perms.ISSUE_ADD_ANSWER_COMMENT,
100 perms.ISSUE_DECLINE,
101 perms.ISSUE_VIEW_ANSWERS,
102 perms.ISSUE_MANAGE_RESPONDENT_ATTACHMENTS,
103 perms.ISSUE_SAVE_QUESTION_RESPONSE,
104 perms.ISSUE_SELF_ISSUE,
105 perms.ISSUE_SUBMIT,
106 perms.ISSUE_UPDATE,
107 perms.ISSUE_UPDATE_WORKFLOW,
108 perms.LIST_AUDIT_EVENTS,
109 perms.PROJECT_ADD_NOTE,
110 perms.PROJECT_ADD_RESPONDENT_NOTE,
111 perms.PROJECT_VIEW_QUESTIONNAIRE,
112 perms.PROJECT_VIEW_WEIGHTING,
113 },
114 "Winloss Reviewer": {perms.ISSUE_VIEW_WINLOSS},
115 "Project Author": {
116 perms.ISSUE_CREATE,
117 perms.ISSUE_DELETE,
118 perms.ISSUE_RETRACT,
119 perms.ISSUE_SET_AWARD_STATUS,
120 perms.ISSUE_UPDATE,
121 perms.ISSUE_VIEW_SCORES,
122 perms.ISSUE_VIEW_ANSWERS,
123 perms.PROJECT_ACCESS,
124 perms.PROJECT_ADD_NOTE,
125 perms.PROJECT_CLOSE,
126 perms.PROJECT_CREATE,
127 perms.PROJECT_CREATE_ON_BEHALF,
128 perms.PROJECT_DELETE,
129 perms.PROJECT_EDIT,
130 perms.PROJECT_EDIT_COSMETIC,
131 perms.PROJECT_EDIT_WEIGHTING,
132 perms.PROJECT_LOCK_QUESTIONNAIRE,
133 perms.PROJECT_REVERT_TO_DRAFT,
134 perms.PROJECT_SAVE_QUESTIONNAIRE,
135 perms.PROJECT_VIEW_QUESTIONNAIRE,
136 perms.PROJECT_VIEW_WEIGHTING,
137 },
138 "Project Publisher": {
139 perms.ISSUE_CREATE,
140 perms.ISSUE_DELETE,
141 perms.ISSUE_PUBLISH,
142 perms.ISSUE_RETRACT,
143 perms.ISSUE_SET_AWARD_STATUS,
144 perms.ISSUE_UPDATE,
145 perms.ISSUE_VIEW_SCORES,
146 perms.ISSUE_VIEW_ANSWERS,
147 perms.PROJECT_ACCESS,
148 perms.PROJECT_ADD_NOTE,
149 perms.PROJECT_CLOSE,
150 perms.PROJECT_CREATE,
151 perms.PROJECT_CREATE_ON_BEHALF,
152 perms.PROJECT_DELETE,
153 perms.PROJECT_EDIT,
154 perms.PROJECT_EDIT_COSMETIC,
155 perms.PROJECT_EDIT_WEIGHTING,
156 perms.PROJECT_LOCK_QUESTIONNAIRE,
157 perms.PROJECT_PUBLISH,
158 perms.PROJECT_REVERT_TO_DRAFT,
159 perms.PROJECT_SAVE_QUESTIONNAIRE,
160 perms.PROJECT_VIEW_QUESTIONNAIRE,
161 perms.PROJECT_VIEW_WEIGHTING,
162 },
163 "Project Owner": {
164 perms.PROJECT_ACCESS,
165 perms.PROJECT_ADD_NOTE,
166 perms.PROJECT_EDIT,
167 perms.PROJECT_EDIT_COSMETIC,
168 perms.PROJECT_EDIT_WEIGHTING,
169 perms.PROJECT_SAVE_QUESTIONNAIRE,
170 perms.PROJECT_VIEW_QUESTIONNAIRE,
171 perms.PROJECT_VIEW_WEIGHTING,
172 },
173 "Score Reviewer": {
174 perms.ISSUE_VIEW_AGREED_SCORES,
175 perms.ISSUE_VIEW_ANSWERS,
176 perms.ISSUE_VIEW_SCORES,
177 perms.PROJECT_ACCESS,
178 perms.PROJECT_VIEW_QUESTIONNAIRE,
179 },
180 "Contracts Manager": {perms.PROJECT_UNLOCK_ISSUES},
181}
184class CheckingSet(set):
185 def add(self, permission):
186 if permission not in perms.ALL_PERMISSIONS:
187 raise ValueError(
188 "Permission %s not found in %s" % (permission, perms.ALL_PERMISSIONS)
189 )
190 super(CheckingSet, self).add(permission)
193ROLES: dict[str, set] = defaultdict(CheckingSet)
195ROLES.update(_builtin_roles)