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

1from collections import defaultdict 

2 

3 

4from rfpy.auth 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_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} 

182 

183 

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) 

191 

192 

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

194 

195ROLES.update(_builtin_roles)