assertThat(selectGroupNamesByQueryAndTemplate(builder().withAtLeastOnePermission(), organization, template)) .containsOnly("Group-1", "Group-2"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setPermission(USER), organization, template)) .containsOnly("Group-1"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setPermission(USER), organization, anotherTemplate)) .containsOnly("Anyone"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("groU"), organization, template)) .containsOnly("Group-1", "Group-2", "Group-3"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("nYo"), organization, template)) .containsOnly("Anyone"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("p-2"), organization, template)) .containsOnly("Group-2"); assertThat(selectGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, 123L)) .isEmpty(); assertThat(selectGroupNamesByQueryAndTemplate(builder().setSearchQuery("unknown"), organization, template)) .isEmpty();
PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(project1.getOrganizationUuid()).setComponentUuid(project1.uuid()).withAtLeastOnePermission().build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).containsExactly(user2.getId(), user1.getId()); query = PermissionQuery.builder().setOrganizationUuid("anotherOrg").setComponentUuid(project1.uuid()).withAtLeastOnePermission().build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).isEmpty(); query = PermissionQuery.builder().setOrganizationUuid(org1.getUuid()).setComponentUuid("missing").withAtLeastOnePermission().build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).isEmpty(); query = PermissionQuery.builder().setOrganizationUuid(org1.getUuid()).setSearchQuery("mar").build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).containsExactly(user2.getId(), user1.getId()); query = PermissionQuery.builder().setOrganizationUuid(org1.getUuid()).setSearchQuery("mariu").build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).containsExactly(user1.getId()); query = PermissionQuery.builder().setOrganizationUuid(org1.getUuid()).setSearchQuery("mariu").setComponentUuid(project1.uuid()).build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).containsExactly(user1.getId()); query = PermissionQuery.builder().setOrganizationUuid("missingOrg").setSearchQuery("mariu").build(); assertThat(underTest.selectUserIdsByQuery(dbSession, query)).isEmpty();
@Test public void selectUserIdsByQuery_is_paginated() { OrganizationDto organization = db.organizations().insert(); List<Integer> userIds = new ArrayList<>(); for (int i = 0; i < 10; i++) { String name = "user-" + i; UserDto user = insertUser(u -> u.setName(name), organization); addGlobalPermission(organization, PROVISIONING, user); addGlobalPermission(organization, SYSTEM_ADMIN, user); userIds.add(user.getId()); } assertThat(underTest.selectUserIdsByQuery(dbSession, PermissionQuery.builder().setOrganizationUuid(organization.getUuid()) .setPageSize(3).setPageIndex(1).build())) .containsExactly(userIds.get(0), userIds.get(1), userIds.get(2)); assertThat(underTest.selectUserIdsByQuery(dbSession, PermissionQuery.builder().setOrganizationUuid(organization.getUuid()) .setPageSize(2).setPageIndex(3).build())) .containsExactly(userIds.get(4), userIds.get(5)); assertThat(underTest.selectUserIdsByQuery(dbSession, PermissionQuery.builder().setOrganizationUuid(organization.getUuid()) .setPageSize(50).setPageIndex(1).build())) .hasSize(10); }
private static PermissionQuery buildPermissionQuery(Request request, OrganizationDto organization, Optional<ProjectId> project) { String textQuery = request.param(Param.TEXT_QUERY); String permission = request.param(PARAM_PERMISSION); PermissionQuery.Builder permissionQuery = PermissionQuery.builder() .setOrganizationUuid(organization.getUuid()) .setPermission(permission) .setPageIndex(request.mandatoryParamAsInt(Param.PAGE)) .setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE)) .setSearchQuery(textQuery); project.ifPresent(projectId -> permissionQuery.setComponentUuid(projectId.getUuid())); if (permission != null) { if (project.isPresent()) { validateProjectPermission(permission); } else { validateGlobalPermission(permission); } } if (textQuery == null) { permissionQuery.withAtLeastOnePermission(); } return permissionQuery.build(); }
private static PermissionQuery buildPermissionQuery(Request request, OrganizationDto org, Optional<ProjectId> project) { String textQuery = request.param(Param.TEXT_QUERY); PermissionQuery.Builder permissionQuery = PermissionQuery.builder() .setOrganizationUuid(org.getUuid()) .setPermission(request.param(PARAM_PERMISSION)) .setPageIndex(request.mandatoryParamAsInt(Param.PAGE)) .setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE)) .setSearchQuery(textQuery); if (project.isPresent()) { permissionQuery.setComponentUuid(project.get().getUuid()); } if (textQuery == null) { permissionQuery.withAtLeastOnePermission(); } return permissionQuery.build(); }
public static Builder builder() { return new Builder(); }
private static PermissionQuery buildQuery(Request wsRequest, PermissionTemplateDto template) { String textQuery = wsRequest.param(TEXT_QUERY); String permission = wsRequest.param(PARAM_PERMISSION); PermissionQuery.Builder query = PermissionQuery.builder() .setOrganizationUuid(template.getOrganizationUuid()) .setTemplate(template.getUuid()) .setPermission(permission != null ? validateProjectPermission(permission) : null) .setPageIndex(wsRequest.mandatoryParamAsInt(PAGE)) .setPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE)) .setSearchQuery(textQuery); if (textQuery == null) { query.withAtLeastOnePermission(); } return query.build(); }
private List<UserPermissionDto> findUserPermissions(DbSession dbSession, OrganizationDto org, List<UserDto> users, Optional<ProjectId> project) { if (users.isEmpty()) { return emptyList(); } List<Integer> userIds = users.stream().map(UserDto::getId).collect(Collectors.toList()); PermissionQuery query = PermissionQuery.builder() .setOrganizationUuid(org.getUuid()) .setComponentUuid(project.map(ProjectId::getUuid).orElse(null)) .withAtLeastOnePermission() .build(); return dbClient.userPermissionDao().selectUserPermissionsByQuery(dbSession, query, userIds); } }
private int countGroups(DbSession dbSession, OrganizationDto org, String permission) { PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(org.getUuid()).setPermission(permission).build(); return dbClient.groupPermissionDao().countGroupsByQuery(dbSession, query); }
private static PermissionQuery buildPermissionQuery(Request request, PermissionTemplateDto template) { String textQuery = request.param(TEXT_QUERY); String permission = request.param(PARAM_PERMISSION); PermissionQuery.Builder permissionQuery = PermissionQuery.builder() .setOrganizationUuid(template.getOrganizationUuid()) .setPermission(permission != null ? validateProjectPermission(permission) : null) .setPageIndex(request.mandatoryParamAsInt(PAGE)) .setPageSize(request.mandatoryParamAsInt(PAGE_SIZE)) .setSearchQuery(textQuery); if (textQuery == null) { permissionQuery.withAtLeastOnePermission(); } return permissionQuery.build(); }
private static PermissionQuery permissionQuery(String permissionKey, OrganizationDto org) { return PermissionQuery.builder() .setOrganizationUuid(org.getUuid()) .setPermission(permissionKey) .withAtLeastOnePermission() .build(); } }
private boolean isUserAlreadyAdded(DbSession dbSession, OrganizationDto organizationDto, long templateId, String userLogin, String permission) { PermissionQuery permissionQuery = PermissionQuery.builder().setOrganizationUuid(organizationDto.getUuid()).setPermission(permission).build(); List<String> usersWithPermission = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, permissionQuery, templateId); return usersWithPermission.stream().anyMatch(s -> s.equals(userLogin)); }
PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(); expectPermissions(query, asList(user2.getId(), user1.getId()), global2, global3, global1); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).build(); expectPermissions(query, asList(user2.getId(), user1.getId(), user3.getId()), global2, global3, org2Global2, global1, org2Global1, project1Perm); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setPermission(SYSTEM_ADMIN).build(); expectPermissions(query, asList(user2.getId(), user1.getId()), global2, global1); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setPermission("missing").build(); expectPermissions(query, emptyList()); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setSearchQuery("mari").build(); expectPermissions(query, asList(user2.getId(), user1.getId()), global2, global3, global1); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setSearchQuery("ogin2").build(); expectPermissions(query, singletonList(user2.getId()), global2, global3); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setSearchQuery("mail2").build(); expectPermissions(query, singletonList(user2.getId()), global2, global3); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("Mari").setPermission(PROVISIONING).build(); expectPermissions(query, singletonList(user2.getId()), global3); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("Unknown").build(); expectPermissions(query, emptyList());
PermissionQuery query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setComponentUuid(project1.uuid()).build(); expectPermissions(query, asList(user2.getId(), user1.getId()), perm3, perm2, perm1); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setPermission("missing").setComponentUuid(project1.uuid()).build(); expectPermissions(query, emptyList()); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("Mari").withAtLeastOnePermission().setComponentUuid(project1.uuid()).build(); expectPermissions(query, asList(user2.getId(), user1.getId()), perm3, perm2, perm1); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("Mari").setPermission(ISSUE_ADMIN).setComponentUuid(project1.uuid()).build(); expectPermissions(query, asList(user2.getId(), user1.getId()), perm3, perm2); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("Unknown").setComponentUuid(project1.uuid()).build(); expectPermissions(query, emptyList()); query = PermissionQuery.builder().setOrganizationUuid(organization.getUuid()).setComponentUuid("missing").withAtLeastOnePermission().build(); expectPermissions(query, emptyList());
permissionTemplateDbTester.addGroupToTemplate(anotherTemplate.getId(), group1.getId(), PROVISIONING); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()), organization, template)) .isEqualTo(4); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission(), organization, template)) .isEqualTo(2); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setPermission(USER), organization, template)).isEqualTo(1); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setPermission(USER), organization, anotherTemplate)) .isEqualTo(1); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("groU"), organization, template)) .isEqualTo(3); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("nYo"), organization, template)) .isEqualTo(1); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("p-2"), organization, template)) .isEqualTo(1); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().build(), organization, 123L)) .isZero(); assertThat(countGroupNamesByQueryAndTemplate(builder().setOrganizationUuid(organization.getUuid()).setSearchQuery("unknown"), organization, template)) .isZero();
@Test public void select_logins() { OrganizationDto organization = db.organizations().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); UserDto user3 = db.users().insertUser(); db.organizations().addMember(organization, user1, user2, user3); PermissionTemplateDto permissionTemplate = db.permissionTemplates().insertTemplate(); db.permissionTemplates().addUserToTemplate(permissionTemplate, user1, USER); db.permissionTemplates().addUserToTemplate(permissionTemplate, user1, ADMIN); db.permissionTemplates().addUserToTemplate(permissionTemplate, user1, CODEVIEWER); db.permissionTemplates().addUserToTemplate(permissionTemplate, user2, USER); PermissionTemplateDto anotherPermissionTemplate = db.permissionTemplates().insertTemplate(); db.permissionTemplates().addUserToTemplate(anotherPermissionTemplate, user1, USER); assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession, builder().setOrganizationUuid(organization.getUuid()).build(), permissionTemplate.getId())) .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin(), user3.getLogin()); assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession, builder().setOrganizationUuid(organization.getUuid()).withAtLeastOnePermission().setPermission(USER).build(), permissionTemplate.getId())) .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin()); }
@Test public void should_be_paginated() { OrganizationDto organization = db.organizations().insert(); UserDto user1 = db.users().insertUser(u -> u.setName("User1")); UserDto user2 = db.users().insertUser(u -> u.setName("User2")); UserDto user3 = db.users().insertUser(u -> u.setName("User3")); db.organizations().addMember(organization, user1, user2, user3); PermissionTemplateDto permissionTemplate = db.permissionTemplates().insertTemplate(); db.permissionTemplates().addUserToTemplate(permissionTemplate, user1, USER); db.permissionTemplates().addUserToTemplate(permissionTemplate, user2, USER); assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession, builder().setOrganizationUuid(organization.getUuid()).setPageIndex(1).setPageSize(2).build(), permissionTemplate.getId())) .containsExactlyInAnyOrder(user1.getLogin(), user2.getLogin()); assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession, builder().setOrganizationUuid(organization.getUuid()).setPageIndex(2).setPageSize(2).build(), permissionTemplate.getId())) .containsExactlyInAnyOrder(user3.getLogin()); assertThat(underTest.selectUserLoginsByQueryAndTemplate(dbSession, builder().setOrganizationUuid(organization.getUuid()).setPageIndex(3).setPageSize(1).build(), permissionTemplate.getId())) .containsExactlyInAnyOrder(user3.getLogin()); }
@Test public void select_groups_by_query_with_project_permissions_on_public_projects() { GroupDto group1 = db.users().insertGroup(); GroupDto group2 = db.users().insertGroup(); GroupDto group3 = db.users().insertGroup(); ComponentDto project = db.components().insertPublicProject(); ComponentDto anotherProject = db.components().insertPublicProject(); db.users().insertProjectPermissionOnGroup(group1, "p1", project); db.users().insertProjectPermissionOnGroup(group1, "p2", project); db.users().insertProjectPermissionOnAnyone("p3", project); db.users().insertProjectPermissionOnGroup(group1, "p4", anotherProject); db.users().insertProjectPermissionOnAnyone("p4", anotherProject); db.users().insertProjectPermissionOnGroup(group3, "p1", anotherProject); db.users().insertPermissionOnGroup(group2, "p5"); PermissionQuery.Builder builderOnComponent = newQuery().setComponentUuid(project.uuid()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.withAtLeastOnePermission().build())).containsOnlyOnce(group1.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.setPermission("p1").build())).containsOnlyOnce(group1.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.setPermission("p3").build())).containsOnlyOnce(ANYONE); }
@Test public void select_groups_by_query_with_project_permissions_on_private_projects() { GroupDto group1 = db.users().insertGroup(); GroupDto group2 = db.users().insertGroup(); GroupDto group3 = db.users().insertGroup(); ComponentDto project = db.components().insertPrivateProject(); ComponentDto anotherProject = db.components().insertPrivateProject(); db.users().insertProjectPermissionOnGroup(group1, SCAN.getKey(), project); db.users().insertProjectPermissionOnGroup(group1, PROVISION_PROJECTS.getKey(), project); db.users().insertProjectPermissionOnGroup(group1, ADMIN, anotherProject); db.users().insertProjectPermissionOnGroup(group3, UserRole.SCAN, anotherProject); db.users().insertPermissionOnGroup(group2, SCAN); PermissionQuery.Builder builderOnComponent = newQuery().setComponentUuid(project.uuid()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.withAtLeastOnePermission().build())).containsOnlyOnce(group1.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.setPermission(SCAN_EXECUTION).build())).containsOnlyOnce(group1.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, builderOnComponent.setPermission(USER).build())).isEmpty(); }
@Test public void selectGroupNamesByQuery_with_global_permission() { OrganizationDto organizationDto = db.organizations().insert(); GroupDto group1 = db.users().insertGroup(organizationDto, "Group-1"); GroupDto group2 = db.users().insertGroup(organizationDto, "Group-2"); GroupDto group3 = db.users().insertGroup(organizationDto, "Group-3"); ComponentDto project = db.components().insertComponent(ComponentTesting.newPrivateProjectDto(organizationDto)); db.users().insertPermissionOnAnyone(organizationDto, SCAN); db.users().insertPermissionOnAnyone(organizationDto, PROVISION_PROJECTS); db.users().insertPermissionOnGroup(group1, SCAN); db.users().insertPermissionOnGroup(group3, ADMINISTER); db.users().insertProjectPermissionOnGroup(group2, UserRole.ADMIN, project); assertThat(underTest.selectGroupNamesByQuery(dbSession, newQuery().setOrganizationUuid(organizationDto.getUuid()).setPermission(SCAN.getKey()).build())).containsExactly(ANYONE, group1.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, newQuery().setOrganizationUuid(organizationDto.getUuid()).setPermission(ADMINISTER.getKey()).build())).containsExactly(group3.getName()); assertThat(underTest.selectGroupNamesByQuery(dbSession, newQuery().setOrganizationUuid(organizationDto.getUuid()).setPermission(PROVISION_PROJECTS.getKey()).build())).containsExactly(ANYONE); }