]> source.dussan.org Git - sonarqube.git/commitdiff
Remove remaining methods related to users from PermissionDao
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 28 Sep 2016 08:29:36 +0000 (10:29 +0200)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 28 Sep 2016 14:32:39 +0000 (16:32 +0200)
server/sonar-server/src/main/java/org/sonar/server/permission/ws/SearchGlobalPermissionsAction.java
server/sonar-server/src/main/java/org/sonar/server/permission/ws/UsersAction.java
server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/DeleteAction.java
sonar-db/src/main/java/org/sonar/db/permission/PermissionDao.java
sonar-db/src/main/java/org/sonar/db/permission/PermissionMapper.java
sonar-db/src/main/java/org/sonar/db/permission/UserPermissionMapper.java
sonar-db/src/main/resources/org/sonar/db/permission/PermissionMapper.xml
sonar-db/src/test/java/org/sonar/db/permission/UserWithPermissionDaoTest.java [deleted file]

index 963d7bcc02ddfcc881abd090666129c8b9b19c13..a4c8b8cebf9ab8837c053b18abf483334cc9f4cb 100644 (file)
@@ -87,8 +87,7 @@ public class SearchGlobalPermissionsAction implements PermissionsWsAction {
           .setName(i18nName(permissionKey))
           .setDescription(i18nDescriptionMessage(permissionKey))
           .setUsersCount(countUsers(dbSession, permissionQuery))
-          .setGroupsCount(countGroups(dbSession, permissionKey))
-      );
+          .setGroupsCount(countGroups(dbSession, permissionKey)));
     }
 
     return response.build();
@@ -107,7 +106,7 @@ public class SearchGlobalPermissionsAction implements PermissionsWsAction {
   }
 
   private int countUsers(DbSession dbSession, PermissionQuery permissionQuery) {
-    return dbClient.permissionDao().countUsersByQuery(dbSession, permissionQuery);
+    return dbClient.userPermissionDao().countUsers(dbSession, permissionQuery);
   }
 
   private static PermissionQuery permissionQuery(String permissionKey) {
index 6913b09f7b2e0b05d047cb4ac49906e274f2dea0..e78aa7444b71c142b1af76cee3c8785f5e041824 100644 (file)
@@ -33,9 +33,9 @@ import org.sonar.api.utils.Paging;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.component.ComponentDto;
+import org.sonar.db.permission.ExtendedUserPermissionDto;
 import org.sonar.db.permission.PermissionQuery;
 import org.sonar.db.user.UserDto;
-import org.sonar.db.user.UserPermissionDto;
 import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.WsPermissions;
 import org.sonarqube.ws.WsPermissions.UsersWsResponse;
@@ -104,8 +104,8 @@ public class UsersAction implements PermissionsWsAction {
       checkProjectAdminUserByComponentDto(userSession, project);
       PermissionQuery dbQuery = buildPermissionQuery(request, project);
       List<UserDto> users = findUsers(dbSession, dbQuery);
-      int total = dbClient.permissionDao().countUsersByQuery(dbSession, dbQuery);
-      List<UserPermissionDto> userPermissions = findUserPermissions(dbSession, users, project);
+      int total = dbClient.userPermissionDao().countUsers(dbSession, dbQuery);
+      List<ExtendedUserPermissionDto> userPermissions = findUserPermissions(dbSession, users, project);
       Paging paging = Paging.forPageIndex(request.getPage()).withPageSize(request.getPageSize()).andTotal(total);
       return buildResponse(users, userPermissions, paging);
     } finally {
@@ -128,7 +128,7 @@ public class UsersAction implements PermissionsWsAction {
     return usersRequest;
   }
 
-  private static UsersWsResponse buildResponse(List<UserDto> users, List<UserPermissionDto> userPermissions, Paging paging) {
+  private static UsersWsResponse buildResponse(List<UserDto> users, List<ExtendedUserPermissionDto> userPermissions, Paging paging) {
     Multimap<Long, String> permissionsByUserId = TreeMultimap.create();
     userPermissions.forEach(userPermission -> permissionsByUserId.put(userPermission.getUserId(), userPermission.getPermission()));
 
@@ -176,11 +176,15 @@ public class UsersAction implements PermissionsWsAction {
     return Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin).immutableSortedCopy(dbClient.userDao().selectByLogins(dbSession, orderedLogins));
   }
 
-  private List<UserPermissionDto> findUserPermissions(DbSession dbSession, List<UserDto> users, Optional<ComponentDto> project) {
+  private List<ExtendedUserPermissionDto> findUserPermissions(DbSession dbSession, List<UserDto> users, Optional<ComponentDto> project) {
     if (users.isEmpty()) {
       return emptyList();
     }
     List<String> logins = users.stream().map(UserDto::getLogin).collect(Collectors.toList());
-    return dbClient.permissionDao().selectUserPermissionsByLoginsAnProject(dbSession, logins, project.isPresent() ? project.get().getId() : null);
+    PermissionQuery query = PermissionQuery.builder()
+      .setComponentUuid(project.isPresent() ? project.get().uuid() : null)
+      .withAtLeastOnePermission()
+      .build();
+    return dbClient.userPermissionDao().select(dbSession, query, logins);
   }
 }
index 1c8baf792d8dce78c3da995a6f187e3b76f077c4..1a6f7b92d7743b98148fceb2fcf7e44d3036c93b 100644 (file)
@@ -103,7 +103,7 @@ public class DeleteAction implements UserGroupsWsAction {
       .selectGroupPermissions(dbSession, groupName, null)
       .contains(GlobalPermissions.SYSTEM_ADMIN);
     boolean isOneRemainingAdminGroup = dbClient.permissionDao().countGroups(dbSession, GlobalPermissions.SYSTEM_ADMIN, null) == 1;
-    boolean hasNoStandaloneAdminUser = dbClient.permissionDao().countUsersByQuery(dbSession,
+    boolean hasNoStandaloneAdminUser = dbClient.userPermissionDao().countUsers(dbSession,
       PermissionQuery.builder().setPermission(GlobalPermissions.SYSTEM_ADMIN).withAtLeastOnePermission().build()) == 0;
     boolean isLastAdminGroup = hasAdminPermission && isOneRemainingAdminGroup && hasNoStandaloneAdminUser;
 
index 49eef238a137172903580167cbf3a7aae1f51c1c..0dd1ab2581177eac272ae31ab9d2df4379b00780 100644 (file)
@@ -29,7 +29,6 @@ import org.sonar.api.security.DefaultGroups;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 import org.sonar.db.user.GroupRoleDto;
-import org.sonar.db.user.UserPermissionDto;
 
 import static org.sonar.db.DatabaseUtils.executeLargeInputs;
 import static org.sonar.db.DatabaseUtils.executeLargeInputsWithoutOutput;
@@ -39,14 +38,6 @@ public class PermissionDao implements Dao {
   private static final String COMPONENT_ID_PARAMETER = "componentId";
   private static final String ANYONE_GROUP_PARAMETER = "anyoneGroup";
 
-  public int countUsersByQuery(DbSession dbSession, PermissionQuery query) {
-    return mapper(dbSession).countUsersByPermissionQuery(query);
-  }
-
-  public List<UserPermissionDto> selectUserPermissionsByLoginsAnProject(DbSession dbSession, List<String> logins, @Nullable Long projectId) {
-    return executeLargeInputs(logins, l -> mapper(dbSession).selectUserPermissionsByLogins(l, projectId));
-  }
-
   public int countGroups(DbSession session, String permission, @Nullable Long componentId) {
     Map<String, Object> parameters = new HashMap<>();
     parameters.put("permission", permission);
index 9a88c39a866788e1688a400190e63bdccd55742b..aae4ccc0e5f12b619f7b971d2bc8a0567524dacf 100644 (file)
@@ -26,14 +26,9 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.session.ResultHandler;
 import org.apache.ibatis.session.RowBounds;
 import org.sonar.db.user.GroupRoleDto;
-import org.sonar.db.user.UserPermissionDto;
 
 public interface PermissionMapper {
 
-  int countUsersByPermissionQuery(@Param("query") PermissionQuery query);
-
-  List<UserPermissionDto> selectUserPermissionsByLogins(@Param("logins") List<String> logins, @Nullable @Param("projectId") Long projectId);
-
   int countGroups(Map<String, Object> parameters);
 
   List<String> selectGroupNamesByPermissionQuery(@Param("query") PermissionQuery query, RowBounds rowBounds);
index 489d73ceeff944753a28ac415287a18081ddd862..e43b6c64fdbb81087fd0dbad4537b6945b0d3a30 100644 (file)
@@ -37,7 +37,7 @@ public interface UserPermissionMapper {
   List<ExtendedUserPermissionDto> selectByQuery(@Param("query") PermissionQuery query, @Nullable @Param("userLogins") Collection<String> userLogins, RowBounds rowBounds);
 
   /**
-   * Count the number of results returned by {@link #selectByQuery(PermissionQuery, Collection, RowBounds)}
+   * Count the number of distinct users returned by {@link #selectByQuery(PermissionQuery, Collection, RowBounds)}
    * {@link PermissionQuery#getPageOffset()} and {@link PermissionQuery#getPageSize()} are ignored.
    *
    * @param useNull must always be null. It is needed for using the sql of {@link #selectByQuery(PermissionQuery, Collection, RowBounds)}
index 6824916ea896193c726a9951d75a177abcd5ee01..dd15e1e8fdee0b9ac581e634d39dbfedcedffe04 100644 (file)
     u.login as login, u.name as name, u.id
   </sql>
 
-  <select id="countUsersByPermissionQuery" parameterType="map" resultType="int">
-    select count(1)
-    from (
-      select distinct <include refid="userColumns" />
-      <include refid="usersByQuery"/>) u
-  </select>
-
   <sql id="usersByQuery">
     from users u
       left join user_roles ur ON ur.user_id=u.id
       </if>
   </sql>
 
-  <select id="selectUserPermissionsByLogins" parameterType="map" resultType="UserRole">
-    SELECT ur.user_id AS userId, ur.resource_id AS componentId, ur.role AS permission
-    FROM user_roles ur
-    INNER JOIN users u ON u.id = ur.user_id AND u.active = ${_true}
-    <where>
-      u.login IN
-      <foreach collection="logins" open="(" close=")" item="login" separator=",">
-        #{login}
-      </foreach>
-      <if test="projectId!=null">
-        AND ur.resource_id=#{projectId}
-      </if>
-      <if test="projectId==null">
-        AND ur.resource_id IS NULL
-      </if>
-    </where>
-  </select>
-
   <select id="groupsCountByProjectIdAndPermission" parameterType="map"
           resultType="org.sonar.db.permission.CountByProjectAndPermissionDto">
     SELECT count(1) as count, permission, componentId
diff --git a/sonar-db/src/test/java/org/sonar/db/permission/UserWithPermissionDaoTest.java b/sonar-db/src/test/java/org/sonar/db/permission/UserWithPermissionDaoTest.java
deleted file mode 100644 (file)
index 6f9a153..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.db.permission;
-
-import java.util.Collections;
-import org.junit.Rule;
-import org.junit.Test;
-import org.sonar.api.utils.System2;
-import org.sonar.db.DbSession;
-import org.sonar.db.DbTester;
-import org.sonar.db.component.ComponentDbTester;
-import org.sonar.db.component.ComponentDto;
-import org.sonar.db.user.UserDbTester;
-import org.sonar.db.user.UserDto;
-import org.sonar.db.user.UserPermissionDto;
-
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.tuple;
-import static org.sonar.api.web.UserRole.ADMIN;
-import static org.sonar.api.web.UserRole.USER;
-import static org.sonar.core.permission.GlobalPermissions.PROVISIONING;
-import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
-import static org.sonar.db.component.ComponentTesting.newProjectDto;
-import static org.sonar.db.user.UserTesting.newUserDto;
-
-public class UserWithPermissionDaoTest {
-
-  @Rule
-  public DbTester dbTester = DbTester.create(System2.INSTANCE);
-  UserDbTester userDb = new UserDbTester(dbTester);
-  PermissionDbTester permissionDb = new PermissionDbTester(dbTester);
-  ComponentDbTester componentDb = new ComponentDbTester(dbTester);
-  DbSession session = dbTester.getSession();
-
-  PermissionDao underTest = new PermissionDao();
-
-  @Test
-  public void count_logins_by_query() {
-    UserDto user1 = userDb.insertUser(newUserDto());
-    UserDto user2 = userDb.insertUser(newUserDto());
-    UserDto user3 = userDb.insertUser(newUserDto());
-    UserDto user4 = userDb.insertUser(newUserDto());
-    ComponentDto project = componentDb.insertComponent(newProjectDto());
-
-    permissionDb.addGlobalPermissionToUser(SYSTEM_ADMIN, user1.getId());
-    permissionDb.addGlobalPermissionToUser(SYSTEM_ADMIN, user2.getId());
-    permissionDb.addGlobalPermissionToUser(SYSTEM_ADMIN, user3.getId());
-    permissionDb.addGlobalPermissionToUser(PROVISIONING, user3.getId());
-    permissionDb.addProjectPermissionToUser(USER, user4.getId(), project.getId());
-
-    assertThat(countUsersByQuery(PermissionQuery.builder().build())).isEqualTo(4);
-    assertThat(countUsersByQuery(PermissionQuery.builder().setPermission(PROVISIONING).build())).isEqualTo(1);
-    assertThat(countUsersByQuery(PermissionQuery.builder().withAtLeastOnePermission().setComponentUuid(project.uuid()).build())).isEqualTo(1);
-  }
-
-  @Test
-  public void select_user_permissions_by_logins_with_global_permissions() {
-    UserDto firstUser = userDb.insertUser(newUserDto());
-    permissionDb.addGlobalPermissionToUser(ADMIN, firstUser.getId());
-
-    UserDto secondUser = userDb.insertUser(newUserDto());
-    permissionDb.addGlobalPermissionToUser(USER, secondUser.getId());
-
-    UserDto thirdUser = userDb.insertUser(newUserDto());
-    ComponentDto project = componentDb.insertComponent(newProjectDto());
-    permissionDb.addProjectPermissionToUser(ADMIN, thirdUser.getId(), project.getId());
-
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, (asList(firstUser.getLogin(), secondUser.getLogin(), thirdUser.getLogin())), null))
-      .extracting(UserPermissionDto::getUserId, UserPermissionDto::getPermission, UserPermissionDto::getComponentId)
-      .containsOnly(
-        tuple(firstUser.getId(), ADMIN, null),
-        tuple(secondUser.getId(), USER, null));
-
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, singletonList(thirdUser.getLogin()), null)).isEmpty();
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, singletonList("unknown"), null)).isEmpty();
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, Collections.emptyList(), null)).isEmpty();
-  }
-
-  @Test
-  public void select_user_permissions_by_logins_with_project_permissions() {
-    UserDto firstUser = userDb.insertUser(newUserDto());
-    ComponentDto project = componentDb.insertComponent(newProjectDto());
-    permissionDb.addProjectPermissionToUser(ADMIN, firstUser.getId(), project.getId());
-
-    UserDto secondUser = userDb.insertUser(newUserDto());
-    permissionDb.addProjectPermissionToUser(USER, secondUser.getId(), project.getId());
-
-    UserDto thirdUser = userDb.insertUser(newUserDto());
-    ComponentDto anotherProject = componentDb.insertComponent(newProjectDto());
-    permissionDb.addProjectPermissionToUser(ADMIN, thirdUser.getId(), anotherProject.getId());
-
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, (asList(firstUser.getLogin(), secondUser.getLogin(), thirdUser.getLogin())), project.getId()))
-      .extracting(UserPermissionDto::getUserId, UserPermissionDto::getPermission, UserPermissionDto::getComponentId)
-      .containsOnly(
-        tuple(firstUser.getId(), ADMIN, project.getId()),
-        tuple(secondUser.getId(), USER, project.getId()));
-
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, (asList(firstUser.getLogin(), secondUser.getLogin(), thirdUser.getLogin())), anotherProject.getId()))
-      .extracting(UserPermissionDto::getUserId, UserPermissionDto::getPermission, UserPermissionDto::getComponentId)
-      .containsOnly(
-        tuple(thirdUser.getId(), ADMIN, anotherProject.getId()));
-
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, singletonList(thirdUser.getLogin()), project.getId())).isEmpty();
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, singletonList("unknown"), project.getId())).isEmpty();
-    assertThat(underTest.selectUserPermissionsByLoginsAnProject(session, Collections.emptyList(), project.getId())).isEmpty();
-  }
-
-  private int countUsersByQuery(PermissionQuery query) {
-    return underTest.countUsersByQuery(session, query);
-  }
-
-}