2934 PO Remove reviewer access from supervisor parts of projects

This commit is contained in:
Andreas Svanberg 2023-10-11 11:57:01 +02:00
parent 0105f6a490
commit bbba2c3dc2
20 changed files with 27 additions and 26 deletions

@ -18,7 +18,7 @@ public interface ProjectService extends GenericService<Project, Long>, FilteredS
boolean isPartOfProject(Project project, User user);
boolean isSupervisorOrFollower(Project project, User user);
boolean hasSupervisingRole(Project project, User user);
Member.Type getMemberType(Project project, User user);

@ -87,9 +87,8 @@ public class ProjectServiceImpl extends AbstractServiceImpl<Project, Long> imple
}
@Override
public boolean isSupervisorOrFollower(Project project, User user) {
return Member.Type.SUPERVISOR == getMemberType(project, user) || Member.Type.CO_SUPERVISOR == getMemberType(project, user)
|| Member.Type.REVIEWER == getMemberType(project, user);
public boolean hasSupervisingRole(Project project, User user) {
return Member.Type.SUPERVISOR == getMemberType(project, user) || Member.Type.CO_SUPERVISOR == getMemberType(project, user);
}
@Override

@ -42,7 +42,7 @@ public class UserProfile extends DomainObject {
@ElementCollection
@Enumerated(EnumType.STRING)
private Collection<ProjectTeamMemberRoles> defaultProjectTeamMemberRolesFilter = EnumSet.allOf(ProjectTeamMemberRoles.class);
private Collection<ProjectTeamMemberRoles> defaultProjectTeamMemberRolesFilter = EnumSet.of(ProjectTeamMemberRoles.CO_SUPERVISOR);
@Basic(optional = false)
private boolean defaultSupervisorFilter = true;

@ -0,0 +1,2 @@
DELETE FROM UserProfile_defaultProjectTeamMemberRolesFilter
WHERE defaultProjectTeamMemberRolesFilter = 'REVIEWER';

@ -236,19 +236,19 @@ public class ProjectServiceImplIntegrationTest extends IntegrationTest {
@Test
public void is_supervisor_or_reviewer() {
assertFalse(projectService.isSupervisorOrFollower(project, user));
assertFalse(projectService.hasSupervisingRole(project, user));
}
@Test
public void is_reviewer() {
project.addReviewer(user);
assertTrue(projectService.isSupervisorOrFollower(project, user));
assertFalse(projectService.hasSupervisingRole(project, user));
}
@Test
public void is_co_supervisor() {
project.addCoSupervisor(user);
assertTrue(projectService.isSupervisorOrFollower(project, user));
assertTrue(projectService.hasSupervisingRole(project, user));
}
@Test

@ -62,14 +62,14 @@ public class ProjectServiceImplTest {
Project project = new Project();
project.addReviewer(user);
assertTrue(projectService.isSupervisorOrFollower(project, user));
assertFalse(projectService.hasSupervisingRole(project, user));
}
@Test
public void isNotSupervisorOrFollower() {
User user = new UserBuilder().create();
assertFalse(projectService.isSupervisorOrFollower(project, user));
assertFalse(projectService.hasSupervisingRole(project, user));
}
@Test

@ -215,7 +215,7 @@ public class ActivityPlanPanel extends GenericPanel<Project> {
}
private boolean hasSupervisingRole() {
return projectService.isSupervisorOrFollower(getProject(), SciProSession.get().getUser());
return projectService.hasSupervisingRole(getProject(), SciProSession.get().getUser());
}
private class TitleCell extends Fragment {

@ -74,7 +74,7 @@ public abstract class AbstractSupervisorProjectDetailsPage extends AbstractSuper
if (project == null) {
throw new RestartResponseException(getApplication().getHomePage());
}
if (!projectService.isSupervisorOrFollower(project, SciProSession.get().getUser())) {
if (!projectService.hasSupervisingRole(project, SciProSession.get().getUser())) {
throw new RestartResponseException(AccessDeniedPage.class);
}

@ -125,7 +125,7 @@ public class SupervisorMyProjectsPanel extends Panel {
updateProfileWithCurrentFilter();
}
});
add(new AjaxCheckBoxMultipleChoice<>(ROLE_FILTER, LambdaModel.of(filterParams, ProjectService.Filter::getRoles, ProjectService.Filter::setRoles), asList(ProjectTeamMemberRoles.values()), new EnumChoiceRenderer<>(this)) {
add(new AjaxCheckBoxMultipleChoice<>(ROLE_FILTER, LambdaModel.of(filterParams, ProjectService.Filter::getRoles, ProjectService.Filter::setRoles), List.of(ProjectTeamMemberRoles.CO_SUPERVISOR), new EnumChoiceRenderer<>(this)) {
@Override
public void onUpdate(AjaxRequestTarget target) {
target.add(dataPanel);

@ -43,7 +43,7 @@ public class SupervisorEditActivityPageTest extends SciProTest {
.build();
DomainObjects.injectId(project, 1L);
when(projectService.findOne(ArgumentMatchers.anyLong())).thenReturn(project);
when(projectService.isSupervisorOrFollower(project, user)).thenReturn(false);
when(projectService.hasSupervisingRole(project, user)).thenReturn(false);
ActivityPlan activityPlan = new ActivityPlan();
activityPlan.setProject(project);
@ -71,7 +71,7 @@ public class SupervisorEditActivityPageTest extends SciProTest {
.build();
DomainObjects.injectId(project, 1L);
when(projectService.findOne(ArgumentMatchers.anyLong())).thenReturn(project);
when(projectService.isSupervisorOrFollower(project, user)).thenReturn(true);
when(projectService.hasSupervisingRole(project, user)).thenReturn(true);
ActivityPlan activityPlan = new ActivityPlan();
activityPlan.setProject(project);

@ -43,7 +43,7 @@ public class SupervisorViewChecklistPageTest extends PageTest {
checklist.setId(2L);
Mockito.when(checklistService.findOne(ArgumentMatchers.isA(Long.class))).thenReturn(checklist);
Mockito.when(projectService.findOne(ArgumentMatchers.isA(Long.class))).thenReturn(checklist.getProject());
Mockito.when(projectService.isSupervisorOrFollower(ArgumentMatchers.isA(Project.class), ArgumentMatchers.isA(User.class))).thenReturn(true);
Mockito.when(projectService.hasSupervisingRole(ArgumentMatchers.isA(Project.class), ArgumentMatchers.isA(User.class))).thenReturn(true);
ChecklistQuestion question = new ChecklistQuestion("", 1);
List<ChecklistQuestion> questions = new ArrayList<>();

@ -35,7 +35,7 @@ public class SupervisorFinalSeminarPageTest extends PageTest {
.build();
DomainObjects.injectId(project, 1L);
when(projectService.findOne(ArgumentMatchers.isA(Long.class))).thenReturn(project);
when(projectService.isSupervisorOrFollower(ArgumentMatchers.isA(Project.class), ArgumentMatchers.isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(ArgumentMatchers.isA(Project.class), ArgumentMatchers.isA(User.class))).thenReturn(true);
}
@Test

@ -39,7 +39,7 @@ public class SupervisorForumBasePageTest extends SciProTest {
.build();
DomainObjects.injectId(project, 1L);
when(projectService.findOne(isA(Long.class))).thenReturn(project);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
setRoles(Roles.values());
setLoggedIn(true);
}

@ -46,7 +46,7 @@ public class SupervisorCreateForumThreadPageTest extends PageTest {
DomainObjects.injectId(project, 1L);
when(projectService.findOne(isA(Long.class))).thenReturn(project);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
tester.startPage(SupervisorCreateForumThreadPage.class, getPageParameters());
}

@ -48,7 +48,7 @@ public class SupervisorThreadedForumPageTest extends PageTest {
project.setStartDate(LocalDate.now());
when(projectService.findOne(isA(Long.class))).thenReturn(project);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
page = tester.startPage(SupervisorThreadedForumPage.class, getPageParameters());
}

@ -55,7 +55,7 @@ public class SupervisorViewForumThreadPageTest extends PageTest {
thread = new ForumBuilder().createThread();
when(projectForumService.findOne(isA(Long.class))).thenReturn(thread);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
page = tester.startPage(SupervisorViewForumThreadPage.class, getPageParameters());
}

@ -37,7 +37,7 @@ public class SupervisorMilestonePageTest extends PageTest {
.build();
DomainObjects.injectId(project, 1L);
when(projectService.findOne(isA(Long.class))).thenReturn(project);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
page = tester.startPage(SupervisorMileStonePage.class, getPageParameters());
}

@ -26,7 +26,7 @@ public abstract class SupervisorPageTest extends PageTest {
setLoggedInAs(project.getHeadSupervisor());
when(projectService.findOne(anyLong())).thenReturn(project);
when(projectService.isSupervisorOrFollower(any(Project.class), any(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(any(Project.class), any(User.class))).thenReturn(true);
}
protected Project createProject() {

@ -36,7 +36,7 @@ public class SupervisorProjectDetailsPageTest extends PageTest {
masterProject = createProject(headSupervisor, student,
new ProjectType(DegreeType.MASTER, "master", "master"), 3L);
when(projectService.findOne(isA(Long.class))).thenReturn(bachelorProject);
when(projectService.isSupervisorOrFollower(isA(Project.class), isA(User.class))).thenReturn(true);
when(projectService.hasSupervisingRole(isA(Project.class), isA(User.class))).thenReturn(true);
FileDescription fileDescription = new FileDescription();
fileDescription.setMimeType("pdf");
fileDescription.setId(1L);

@ -54,9 +54,9 @@ public class SupervisorStartPageTest extends SciProTest {
@Test
public void selecting_role_updates_filter() {
ProjectTeamMemberRoles role = ProjectTeamMemberRoles.REVIEWER;
ProjectTeamMemberRoles role = ProjectTeamMemberRoles.CO_SUPERVISOR;
filterForm().select(SupervisorMyProjectsPanel.ROLE_FILTER, role.ordinal()).submit();
filterForm().select(SupervisorMyProjectsPanel.ROLE_FILTER, 0).submit();
assertThat(getFilterParams().getRoles(), hasItem(role));
}