diff options
author | Wojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com> | 2023-07-06 11:19:05 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-07-18 20:03:21 +0000 |
commit | b7f05a7b569bd29eb43b906eafec0019ce4f9dd3 (patch) | |
tree | deb42cfaa12022b906b7f84c42c5dcb83d857af6 /server/sonar-db-dao/src | |
parent | 7ad2ec83dcede27ee5541740c08d3281ce3eed98 (diff) | |
download | sonarqube-b7f05a7b569bd29eb43b906eafec0019ce4f9dd3.tar.gz sonarqube-b7f05a7b569bd29eb43b906eafec0019ce4f9dd3.zip |
SONAR-19785 Fetch all group permissions for a project from the database.
Diffstat (limited to 'server/sonar-db-dao/src')
4 files changed, 51 insertions, 56 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/permission/GroupPermissionDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/permission/GroupPermissionDaoIT.java index 61bdc90987a..3fff15626da 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/permission/GroupPermissionDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/permission/GroupPermissionDaoIT.java @@ -39,6 +39,7 @@ import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.ProjectData; import org.sonar.db.project.ProjectDto; import org.sonar.db.user.GroupDto; +import org.sonar.db.user.UserDto; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; @@ -516,43 +517,6 @@ public class GroupPermissionDaoIT { } @Test - public void selectAllPermissionsByGroupUuid_on_public_project() { - GroupDto group1 = db.users().insertGroup("group1"); - ComponentDto project1 = db.components().insertPublicProject().getMainBranchComponent(); - ComponentDto project2 = db.components().insertPublicProject().getMainBranchComponent(); - db.users().insertPermissionOnAnyone("perm1"); - db.users().insertPermissionOnGroup(group1, "perm2"); - db.users().insertProjectPermissionOnGroup(group1, "perm3", project1); - db.users().insertProjectPermissionOnGroup(group1, "perm4", project1); - db.users().insertProjectPermissionOnGroup(group1, "perm5", project2); - db.users().insertProjectPermissionOnAnyone("perm6", project1); - - List<GroupPermissionDto> result = new ArrayList<>(); - underTest.selectAllPermissionsByGroupUuid(dbSession, group1.getUuid(), context -> result.add(context.getResultObject())); - assertThat(result).extracting(GroupPermissionDto::getEntityUuid, GroupPermissionDto::getRole).containsOnly( - tuple(null, "perm2"), - tuple(project1.uuid(), "perm3"), tuple(project1.uuid(), "perm4"), tuple(project2.uuid(), "perm5")); - } - - @Test - public void selectAllPermissionsByGroupUuid_on_private_project() { - GroupDto group1 = db.users().insertGroup("group1"); - ComponentDto project1 = db.components().insertPrivateProject().getMainBranchComponent(); - ComponentDto project2 = db.components().insertPrivateProject().getMainBranchComponent(); - db.users().insertPermissionOnAnyone("perm1"); - db.users().insertPermissionOnGroup(group1, "perm2"); - db.users().insertProjectPermissionOnGroup(group1, "perm3", project1); - db.users().insertProjectPermissionOnGroup(group1, "perm4", project1); - db.users().insertProjectPermissionOnGroup(group1, "perm5", project2); - - List<GroupPermissionDto> result = new ArrayList<>(); - underTest.selectAllPermissionsByGroupUuid(dbSession, group1.getUuid(), context -> result.add(context.getResultObject())); - assertThat(result).extracting(GroupPermissionDto::getEntityUuid, GroupPermissionDto::getRole).containsOnly( - tuple(null, "perm2"), - tuple(project1.uuid(), "perm3"), tuple(project1.uuid(), "perm4"), tuple(project2.uuid(), "perm5")); - } - - @Test public void selectGroupUuidsWithPermissionOnEntityBut_returns_empty_if_project_does_not_exist() { ProjectData project = randomPublicOrPrivateProject(); GroupDto group = db.users().insertGroup(); @@ -827,7 +791,7 @@ public class GroupPermissionDaoIT { GroupDto group = db.users().insertGroup(); ProjectDto projectDto = new ProjectDto().setUuid("1234"); - assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, null, projectDto)).isZero(); + assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, null, projectDto)).isZero(); assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, group.getUuid(), projectDto)).isZero(); } @@ -836,7 +800,7 @@ public class GroupPermissionDaoIT { ProjectData project = randomPublicOrPrivateProject(); GroupDto group = db.users().insertGroup(); - assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, null, project.getProjectDto())).isZero(); + assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, null, project.getProjectDto())).isZero(); assertThat(underTest.deleteByEntityAndGroupUuid(dbSession, group.getUuid(), project.getProjectDto())).isZero(); } @@ -917,7 +881,7 @@ public class GroupPermissionDaoIT { assertThat(getProjectPermissionsForAnyOne(project.getUuid())).containsOnly("p2"); assertThat(getProjectPermissionsForGroup(project.getUuid(), group)).containsOnly("p2"); - deletedRows = underTest.deleteByEntityAndPermission(dbSession, "p2", project); + deletedRows = underTest.deleteByEntityAndPermission(dbSession, "p2", project); assertThat(deletedRows).isEqualTo(2); assertThat(getGlobalPermissionsForAnyone()).containsOnly("p1", "p2"); @@ -987,6 +951,41 @@ public class GroupPermissionDaoIT { assertThat(results).containsOnly(group1.getUuid()); } + @Test + public void selectGroupPermissionsOnEntity_whenPermissionsExist_returnsGroupPermissions() { + GroupDto group1 = db.users().insertGroup(); + GroupDto group2 = db.users().insertGroup(); + GroupDto group3 = db.users().insertGroup(); + UserDto user = db.users().insertUser(); + ProjectDto project = db.components().insertPrivateProject().getProjectDto(); + ProjectDto otherProject = db.components().insertPrivateProject().getProjectDto(); + String permission1 = "permission_1"; + String permission2 = "permission_2"; + db.users().insertEntityPermissionOnGroup(group1, permission1, project); + db.users().insertEntityPermissionOnGroup(group1, permission2, project); + db.users().insertEntityPermissionOnGroup(group2, permission1, project); + db.users().insertEntityPermissionOnGroup(group3, permission2, otherProject); + db.users().insertProjectPermissionOnUser(user, permission1, project); + + List<GroupPermissionDto> results = underTest.selectGroupPermissionsOnEntity(dbSession, project.getUuid()); + + assertThat(results) + .extracting( + GroupPermissionDto::getGroupUuid, GroupPermissionDto::getEntityUuid, GroupPermissionDto::getRole) + .containsExactlyInAnyOrder( + tuple(group1.getUuid(), project.getUuid(), permission1), + tuple(group1.getUuid(), project.getUuid(), permission2), + tuple(group2.getUuid(), project.getUuid(), permission1)); + } + + @Test + public void selectGroupPermissionsOnEntity_whenPermissionsDontExist_returnEmptyList() { + ProjectDto project = db.components().insertPrivateProject().getProjectDto(); + + assertThat(underTest.selectGroupPermissionsOnEntity(dbSession, project.getUuid())) + .isEmpty(); + } + private Collection<String> getGlobalPermissionsForAnyone() { return getPermissions("group_uuid is null and entity_uuid is null"); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java index f9fd9265632..39d0d8cfb22 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java @@ -82,14 +82,6 @@ public class GroupPermissionDao implements Dao { } /** - * Select global and project permissions of a given group (Anyone group is NOT supported) - * Each row returns a {@link GroupPermissionDto} - */ - public void selectAllPermissionsByGroupUuid(DbSession dbSession, String groupUuid, ResultHandler<GroupPermissionDto> resultHandler) { - mapper(dbSession).selectAllPermissionsByGroupUuid(groupUuid, resultHandler); - } - - /** * Each row returns a {@link CountPerEntityPermission} */ public void groupsCountByComponentUuidAndPermission(DbSession dbSession, List<String> entityUuids, ResultHandler<CountPerEntityPermission> resultHandler) { @@ -136,6 +128,10 @@ public class GroupPermissionDao implements Dao { return mapper(session).selectGroupUuidsWithPermissionOnEntity(entityUuid, permission); } + public List<GroupPermissionDto> selectGroupPermissionsOnEntity(DbSession session, String entityUuid) { + return mapper(session).selectGroupPermissionsOnEntity(entityUuid); + } + public void insert(DbSession dbSession, GroupPermissionDto groupPermissionDto, @Nullable EntityDto entityDto, @Nullable PermissionTemplateDto permissionTemplateDto) { mapper(dbSession).insert(groupPermissionDto); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionMapper.java index 9305b3a7ecd..f3d2934b39f 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionMapper.java @@ -49,8 +49,6 @@ public interface GroupPermissionMapper { List<String> selectEntityPermissionsOfGroup(@Nullable @Param("groupUuid") String groupUuid, @Param("entityUuid") String entityUuid); - void selectAllPermissionsByGroupUuid(@Param("groupUuid") String groupUuid, ResultHandler<GroupPermissionDto> resultHandler); - /** * Lists uuid of groups with at least one permission on the specified entity but which do not have the specified * permission, <strong>excluding group "AnyOne"</strong> (which implies the returned {@code Set} can't contain @@ -60,6 +58,8 @@ public interface GroupPermissionMapper { Set<String> selectGroupUuidsWithPermissionOnEntity(@Param("entityUuid") String entityUuid, @Param("role") String permission); + List<GroupPermissionDto> selectGroupPermissionsOnEntity(@Param("entityUuid") String entityUuid); + int deleteByEntityUuid(@Param("entityUuid") String entityUuid); int deleteByEntityUuidAndGroupUuid(@Param("entityUuid") String entityUuid, @Nullable @Param("groupUuid") String groupUuid); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/GroupPermissionMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/GroupPermissionMapper.xml index f6cef3a74a7..78d5f251ecd 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/GroupPermissionMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/GroupPermissionMapper.xml @@ -193,12 +193,6 @@ </choose> </select> - <select id="selectAllPermissionsByGroupUuid" parameterType="map" resultType="GroupPermission"> - select gr.group_uuid as groupUuid, gr.entity_uuid as entityUuid, gr.role as role - from group_roles gr - where gr.group_uuid = #{groupUuid,jdbcType=VARCHAR} - </select> - <select id="selectGroupUuidsWithPermissionOnEntityBut" resultType="string"> select distinct gr1.group_uuid @@ -230,6 +224,12 @@ and gr1.role = #{role,jdbcType=VARCHAR} </select> + <select id="selectGroupPermissionsOnEntity" resultType="GroupPermission"> + select gr.group_uuid as groupUuid, gr.entity_uuid as entityUuid, gr.role as role + from group_roles gr + where gr.entity_uuid = #{entityUuid,jdbcType=VARCHAR} + </select> + <insert id="insert" parameterType="GroupPermission"> insert into group_roles ( uuid, |