Coverage for postrfp/authorisation/roles.py: 100%

10 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-22 21:34 +0000

1from collections import defaultdict 

2 

3 

4from postrfp.authorisation import perms 

5 

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_APPROVE, 

41 perms.PROJECT_CLOSE, 

42 perms.PROJECT_CREATE, 

43 perms.PROJECT_CREATE_ON_BEHALF, 

44 perms.PROJECT_DELETE, 

45 perms.PROJECT_EDIT, 

46 perms.PROJECT_EDIT_COSMETIC, 

47 perms.PROJECT_EDIT_WEIGHTING, 

48 perms.PROJECT_EXPORT_COMPLETE, 

49 perms.PROJECT_IMPORT_COMPLETE, 

50 perms.PROJECT_LOCK_QUESTIONNAIRE, 

51 perms.PROJECT_MANAGE_ROLES, 

52 perms.PROJECT_PUBLISH, 

53 perms.PROJECT_REVERT_TO_DRAFT, 

54 perms.PROJECT_SAVE_QUESTIONNAIRE, 

55 perms.PROJECT_VIEW_QUESTIONNAIRE, 

56 perms.PROJECT_VIEW_WEIGHTING, 

57 perms.REF_CONTENT_SAVE, 

58 perms.REF_MANAGE_PERMISSIONS, 

59 perms.REF_SPEC_SAVE, 

60 }, 

61 "Project Scorer": { 

62 perms.ISSUE_SAVE_AGREED_SCORES, 

63 perms.ISSUE_SAVE_SCORES, 

64 perms.ISSUE_VIEW_AGREED_SCORES, 

65 perms.ISSUE_VIEW_SCORES, 

66 perms.ISSUE_VIEW_ANSWERS, 

67 perms.PROJECT_ACCESS, 

68 perms.PROJECT_ADD_NOTE, 

69 perms.PROJECT_VIEW_QUESTIONNAIRE, 

70 perms.PROJECT_VIEW_WEIGHTING, 

71 }, 

72 "Restricted Scorer": { 

73 perms.ISSUE_SAVE_AGREED_SCORES, 

74 perms.ISSUE_SAVE_SCORES, 

75 perms.ISSUE_VIEW_AGREED_SCORES, 

76 perms.ISSUE_VIEW_SCORES, 

77 perms.ISSUE_VIEW_ANSWERS, 

78 perms.PROJECT_ACCESS, 

79 perms.PROJECT_ADD_NOTE, 

80 perms.PROJECT_VIEW_QUESTIONNAIRE, 

81 }, 

82 "Respondent": { 

83 perms.ISSUE_SAVE_QUESTION_RESPONSE, 

84 perms.ISSUE_VIEW_ANSWERS, 

85 perms.PROJECT_ADD_RESPONDENT_NOTE, 

86 }, 

87 "Response Reviewer": { 

88 perms.ALLOCATE_QUESTIONS, 

89 perms.ANSWER_QUESTIONS_ALLOCATED_TO_ANYONE, 

90 perms.APPROVE_ANSWERS, 

91 perms.ISSUE_MANAGE_RESPONDENT_ATTACHMENTS, 

92 perms.ISSUE_SAVE_QUESTION_RESPONSE, 

93 perms.ISSUE_VIEW_ANSWERS, 

94 perms.ISSUE_UPDATE, 

95 perms.LIST_AUDIT_EVENTS, 

96 perms.PROJECT_ADD_RESPONDENT_NOTE, 

97 }, 

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 }, 

118 "Winloss Reviewer": {perms.ISSUE_VIEW_WINLOSS}, 

119 "Project Author": { 

120 perms.ISSUE_CREATE, 

121 perms.ISSUE_DELETE, 

122 perms.ISSUE_RETRACT, 

123 perms.ISSUE_SET_AWARD_STATUS, 

124 perms.ISSUE_UPDATE, 

125 perms.ISSUE_VIEW_SCORES, 

126 perms.ISSUE_VIEW_ANSWERS, 

127 perms.PROJECT_ACCESS, 

128 perms.PROJECT_ADD_NOTE, 

129 perms.PROJECT_CLOSE, 

130 perms.PROJECT_CREATE, 

131 perms.PROJECT_CREATE_ON_BEHALF, 

132 perms.PROJECT_DELETE, 

133 perms.PROJECT_EDIT, 

134 perms.PROJECT_EDIT_COSMETIC, 

135 perms.PROJECT_EDIT_WEIGHTING, 

136 perms.PROJECT_LOCK_QUESTIONNAIRE, 

137 perms.PROJECT_REVERT_TO_DRAFT, 

138 perms.PROJECT_SAVE_QUESTIONNAIRE, 

139 perms.PROJECT_VIEW_QUESTIONNAIRE, 

140 perms.PROJECT_VIEW_WEIGHTING, 

141 }, 

142 "Project Publisher": { 

143 perms.ISSUE_CREATE, 

144 perms.ISSUE_DELETE, 

145 perms.ISSUE_PUBLISH, 

146 perms.ISSUE_RETRACT, 

147 perms.ISSUE_SET_AWARD_STATUS, 

148 perms.ISSUE_UPDATE, 

149 perms.ISSUE_VIEW_SCORES, 

150 perms.ISSUE_VIEW_ANSWERS, 

151 perms.PROJECT_ACCESS, 

152 perms.PROJECT_ADD_NOTE, 

153 perms.PROJECT_APPROVE, 

154 perms.PROJECT_CLOSE, 

155 perms.PROJECT_CREATE, 

156 perms.PROJECT_CREATE_ON_BEHALF, 

157 perms.PROJECT_DELETE, 

158 perms.PROJECT_EDIT, 

159 perms.PROJECT_EDIT_COSMETIC, 

160 perms.PROJECT_EDIT_WEIGHTING, 

161 perms.PROJECT_LOCK_QUESTIONNAIRE, 

162 perms.PROJECT_PUBLISH, 

163 perms.PROJECT_REVERT_TO_DRAFT, 

164 perms.PROJECT_SAVE_QUESTIONNAIRE, 

165 perms.PROJECT_VIEW_QUESTIONNAIRE, 

166 perms.PROJECT_VIEW_WEIGHTING, 

167 }, 

168 "Project Owner": { 

169 perms.PROJECT_ACCESS, 

170 perms.PROJECT_ADD_NOTE, 

171 perms.PROJECT_APPROVE, 

172 perms.PROJECT_EDIT, 

173 perms.PROJECT_EDIT_COSMETIC, 

174 perms.PROJECT_EDIT_WEIGHTING, 

175 perms.PROJECT_SAVE_QUESTIONNAIRE, 

176 perms.PROJECT_VIEW_QUESTIONNAIRE, 

177 perms.PROJECT_VIEW_WEIGHTING, 

178 }, 

179 "Score Reviewer": { 

180 perms.ISSUE_VIEW_AGREED_SCORES, 

181 perms.ISSUE_VIEW_ANSWERS, 

182 perms.ISSUE_VIEW_SCORES, 

183 perms.PROJECT_ACCESS, 

184 perms.PROJECT_VIEW_QUESTIONNAIRE, 

185 }, 

186 "Contracts Manager": {perms.PROJECT_UNLOCK_ISSUES}, 

187} 

188 

189 

190class CheckingSet(set): 

191 def add(self, permission): 

192 if permission not in perms.ALL_PERMISSIONS: 

193 raise ValueError( 

194 "Permission %s not found in %s" % (permission, perms.ALL_PERMISSIONS) 

195 ) 

196 super(CheckingSet, self).add(permission) 

197 

198 

199ROLES: dict[str, set] = defaultdict(CheckingSet) 

200 

201ROLES.update(_builtin_roles)