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

1from collections import defaultdict 

2from rfpy.auth import perms 

3 

4_builtin_roles = { 

5 

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

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 

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

79 

80 'Respondent': { 

81 perms.ISSUE_SAVE_QUESTION_RESPONSE, 

82 perms.ISSUE_VIEW_ANSWERS, 

83 perms.PROJECT_ADD_RESPONDENT_NOTE, 

84 }, 

85 

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

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 

119 'Winloss Reviewer': { 

120 perms.ISSUE_VIEW_WINLOSS 

121 }, 

122 

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

146 

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

172 

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

183 

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

191 

192 'Contracts Manager': { 

193 perms.PROJECT_UNLOCK_ISSUES 

194 } 

195} 

196 

197 

198class CheckingSet(set): 

199 

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) 

204 

205 

206ROLES = defaultdict(CheckingSet) 

207 

208ROLES.update(_builtin_roles)