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