aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao/src
diff options
context:
space:
mode:
authorWojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com>2023-07-06 11:19:05 +0200
committersonartech <sonartech@sonarsource.com>2023-07-18 20:03:21 +0000
commitb7f05a7b569bd29eb43b906eafec0019ce4f9dd3 (patch)
treedeb42cfaa12022b906b7f84c42c5dcb83d857af6 /server/sonar-db-dao/src
parent7ad2ec83dcede27ee5541740c08d3281ce3eed98 (diff)
downloadsonarqube-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')
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/permission/GroupPermissionDaoIT.java79
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionDao.java12
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/permission/GroupPermissionMapper.java4
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/permission/GroupPermissionMapper.xml12
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,