Skip to content
Snippets Groups Projects

Resolve "Clicking on archived edition gives error page"

7 files
+ 66
28
Compare changes
  • Side-by-side
  • Inline

Files

@@ -188,6 +188,16 @@ public class AuthorizationService {
return isAdmin() || getRoleInEdition(editionId) == TEACHER;
}
/**
* Checks whether the authenticated user has the teacher read-only role in an edition.
*
* @param editionId The id of the edition
* @return True iff the user has the teacher read-only role.
*/
public boolean isTeacherROInEdition(Long editionId) {
return getRoleInEdition(editionId) == TEACHER_RO;
}
/**
* Checks whether the authenticated user is at least a head TA in an edition.
*
@@ -238,7 +248,7 @@ public class AuthorizationService {
* @return True iff the user can view the edition
*/
public boolean canViewEdition(Long editionId) {
return isAtLeastStudentInEdition(editionId);
return isAtLeastStudentInEdition(editionId) || isTeacherROInEdition(editionId);
}
/**
@@ -248,7 +258,7 @@ public class AuthorizationService {
* @return True iff the user can view the edition's students
*/
public boolean canViewEditionStudents(Long editionId) {
return isAtLeastTAInEdition(editionId);
return isAtLeastTAInEdition(editionId) || isTeacherROInEdition(editionId);
}
/**
@@ -258,7 +268,7 @@ public class AuthorizationService {
* @return True iff the user can view the edition's staff
*/
public boolean canViewEditionStaff(Long editionId) {
return isAtLeastStudentInEdition(editionId);
return isAtLeastStudentInEdition(editionId) || isTeacherROInEdition(editionId);
}
/**
@@ -268,7 +278,7 @@ public class AuthorizationService {
* @return True iff the user can view the edition's statistics
*/
public boolean canViewEditionStatistics(Long editionId) {
return isAtLeastHeadTAInEdition(editionId);
return isAtLeastHeadTAInEdition(editionId) || isTeacherROInEdition(editionId);
}
/**
@@ -278,7 +288,7 @@ public class AuthorizationService {
* @return True iff the user can view the edition's overview
*/
public boolean canViewEditionOverview(Long editionId) {
return isAtLeastHeadTAInEdition(editionId);
return isAtLeastHeadTAInEdition(editionId) || isTeacherROInEdition(editionId);
}
/**
@@ -511,6 +521,16 @@ public class AuthorizationService {
return isAtLeastTeacherInEdition(moduleCache.getOrThrow(moduleId).getEdition().getId());
}
/**
* Checks whether the authenticated user has the teacher read-only role in a module.
*
* @param moduleId The id of the module
* @return True iff the user has the teacher read-only role.
*/
public boolean isTeacherROInModule(Long moduleId) {
return isTeacherROInEdition(moduleCache.getOrThrow(moduleId).getEdition().getId());
}
/**
* Checks whether the authenticated user is at least a head TA in an module.
*
@@ -558,7 +578,7 @@ public class AuthorizationService {
* @return True iff the user can view the module
*/
public boolean canViewModule(Long moduleId) {
return isAtLeastTAInModule(moduleId);
return isAtLeastTAInModule(moduleId) || isTeacherROInModule(moduleId);
}
/**
@@ -568,7 +588,7 @@ public class AuthorizationService {
* @return True iff the user can view the module's statistics
*/
public boolean canViewModuleStatistics(Long moduleId) {
return isAtLeastHeadTAInModule(moduleId);
return isAtLeastHeadTAInModule(moduleId) || isTeacherROInModule(moduleId);
}
/**
@@ -578,7 +598,7 @@ public class AuthorizationService {
* @return True iff the user can view the module's overview
*/
public boolean canViewModuleOverview(Long moduleId) {
return isAtLeastHeadTAInModule(moduleId);
return isAtLeastHeadTAInModule(moduleId) || isTeacherROInModule(moduleId);
}
/**
@@ -588,7 +608,7 @@ public class AuthorizationService {
* @return True iff the user can view the module's groups
*/
public boolean canViewModuleGroups(Long moduleId) {
return isAtLeastStudentInModule(moduleId);
return isAtLeastStudentInModule(moduleId) || isTeacherROInModule(moduleId);
}
/**
@@ -645,6 +665,16 @@ public class AuthorizationService {
return isAtLeastTeacherInModule(assignmentCache.getOrThrow(assignmentId).getModule().getId());
}
/**
* Checks whether the authenticated user has the teacher read-only role in an assignment.
*
* @param assignmentId The id of the assignmentId
* @return True iff the user has the teacher read-only role.
*/
public boolean isTeacherROInAssignment(Long assignmentId) {
return isTeacherROInModule(assignmentCache.getOrThrow(assignmentId).getModule().getId());
}
/**
* Checks whether the authenticated user is at least a head TA in an assignment.
*
@@ -692,7 +722,7 @@ public class AuthorizationService {
* @return True iff the user can view the assignment
*/
public boolean canViewAssignment(Long assignmentId) {
return isAtLeastStudentInAssignment(assignmentId);
return isAtLeastStudentInAssignment(assignmentId) || isTeacherROInAssignment(assignmentId);
}
/**
@@ -702,7 +732,7 @@ public class AuthorizationService {
* @return True iff the user can view the assignment's statistics
*/
public boolean canViewAssignmentStatistics(Long assignmentId) {
return isAtLeastHeadTAInAssignment(assignmentId);
return isAtLeastHeadTAInAssignment(assignmentId) || isTeacherROInAssignment(assignmentId);
}
/**
@@ -712,7 +742,7 @@ public class AuthorizationService {
* @return True iff the user can view the assignment's submissions
*/
public boolean canViewAssignmentSubmissions(Long assignmentId) {
return isAtLeastHeadTAInAssignment(assignmentId);
return isAtLeastHeadTAInAssignment(assignmentId) || isTeacherROInAssignment(assignmentId);
}
/**
@@ -722,7 +752,7 @@ public class AuthorizationService {
* @return True iff the user can download the assignment's submissions
*/
public boolean canDownloadAssignmentSubmissions(Long assignmentId) {
return isAtLeastHeadTAInAssignment(assignmentId);
return isAtLeastHeadTAInAssignment(assignmentId) || isTeacherROInAssignment(assignmentId);
}
/**
@@ -797,7 +827,8 @@ public class AuthorizationService {
* @return True iff the user can view the version
*/
public boolean canViewVersion(Long versionId) {
return isAtLeastTAInAssignment(versionRepository.findByIdOrThrow(versionId).getAssignmentId());
Long assignmentId = versionRepository.findByIdOrThrow(versionId).getAssignmentId();
return isAtLeastTAInAssignment(assignmentId) || isTeacherROInAssignment(assignmentId);
}
/**
@@ -872,7 +903,9 @@ public class AuthorizationService {
*/
public boolean canDownloadSubmission(Long submissionId) {
SubmissionDetailsDTO submission = submissionCache.getOrThrow(submissionId);
return isAtLeastTAInAssignment(submission.getAssignment().getId()) ||
Long assignmentId = submission.getAssignment().getId();
return isAtLeastTAInAssignment(assignmentId) ||
isTeacherROInAssignment(assignmentId) ||
isMemberOfGroup(submission.getGroup().getId());
}
@@ -897,8 +930,10 @@ public class AuthorizationService {
* @return True iff the user can view the group.
*/
public boolean canViewGroup(Long groupId) {
Long moduleId = groupCache.getOrThrow(groupId).getModule().getId();
return isMemberOfGroup(groupId)
|| isAtLeastTAInModule(groupCache.getOrThrow(groupId).getModule().getId());
|| isAtLeastTAInModule(moduleId)
|| isTeacherROInModule(moduleId);
}
/**
@@ -960,7 +995,9 @@ public class AuthorizationService {
* @return True iff the user can download the group's submissions
*/
public boolean canDownloadGroupSubmissions(Long groupId) {
return isAtLeastTAInModule(groupCache.getOrThrow(groupId).getModule().getId())
Long moduleId = groupCache.getOrThrow(groupId).getModule().getId();
return isAtLeastTAInModule(moduleId)
|| isTeacherROInModule(moduleId)
|| isMemberOfGroup(groupId);
}
Loading