]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6582 Fix bug with permission checks in ServerUserSession
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 10 Jun 2015 13:03:51 +0000 (15:03 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Thu, 18 Jun 2015 07:34:53 +0000 (09:34 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java
server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueComponentHelper.java
server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueJsonWriter.java
server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java
server/sonar-server/src/main/java/org/sonar/server/user/ServerUserSession.java
server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java

index 0011cb1a228d3726d885f171302f7397fbed9a01..c2331f884c09dfddf32dc5651b61b38281fa5c51 100644 (file)
  */
 package org.sonar.server.issue;
 
-import org.sonar.server.issue.ws.IssueComponentHelper;
-import org.sonar.server.issue.ws.IssueJsonWriter;
-
-import org.elasticsearch.common.collect.Lists;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -32,6 +28,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import java.io.StringWriter;
@@ -73,13 +70,15 @@ import org.sonar.server.exceptions.BadRequestException;
 import org.sonar.server.issue.actionplan.ActionPlanService;
 import org.sonar.server.issue.filter.IssueFilterParameters;
 import org.sonar.server.issue.filter.IssueFilterService;
+import org.sonar.server.issue.ws.IssueComponentHelper;
+import org.sonar.server.issue.ws.IssueJsonWriter;
 import org.sonar.server.search.QueryContext;
 import org.sonar.server.user.UserSession;
 import org.sonar.server.user.index.UserIndex;
 import org.sonar.server.util.RubyUtils;
 import org.sonar.server.util.Validation;
+
 import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Maps.newHashMap;
 
 /**
  * Used through ruby code <pre>Internal.issues</pre>
index 2d9d2ae6b5a413c634148e288ce6085ec148e9ac..fd7e7e22837fa21e38663fc07e4dee66bca3eefd 100644 (file)
  */
 package org.sonar.server.issue.ws;
 
-import static com.google.common.collect.Maps.newHashMap;
-
-import org.sonar.server.db.DbClient;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.persistence.DbSession;
+import org.sonar.server.db.DbClient;
+
+import static com.google.common.collect.Maps.newHashMap;
 
 /**
  * This class computes some collections of {@link ComponentDto}s used to serialize issues.
index fac3c5e367efa49edfc11075baa404c6510b1044..9e37fe17d244082a86e435c07d6765a8f281bac0 100644 (file)
@@ -20,8 +20,6 @@
 
 package org.sonar.server.issue.ws;
 
-import org.sonar.server.user.ws.UserJsonWriter;
-
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
 import java.util.Collection;
@@ -44,6 +42,7 @@ import org.sonar.api.utils.text.JsonWriter;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.markdown.Markdown;
 import org.sonar.server.user.UserSession;
+import org.sonar.server.user.ws.UserJsonWriter;
 
 public class IssueJsonWriter {
 
index dfccb580160afb531e10d8debe1f8fc37f7e9bd6..42ef539aa6c380e8a29200b61d24bec601cbe5f7 100644 (file)
@@ -19,9 +19,6 @@
  */
 package org.sonar.server.platform.platformlevel;
 
-import org.sonar.server.issue.ws.IssueComponentHelper;
-import org.sonar.server.issue.ws.IssueJsonWriter;
-
 import java.util.List;
 import org.sonar.api.config.EmailSettings;
 import org.sonar.api.issue.action.Actions;
@@ -159,6 +156,8 @@ import org.sonar.server.issue.notification.NewIssuesNotificationDispatcher;
 import org.sonar.server.issue.notification.NewIssuesNotificationFactory;
 import org.sonar.server.issue.ws.ComponentTagsAction;
 import org.sonar.server.issue.ws.IssueActionsWriter;
+import org.sonar.server.issue.ws.IssueComponentHelper;
+import org.sonar.server.issue.ws.IssueJsonWriter;
 import org.sonar.server.issue.ws.IssuesWs;
 import org.sonar.server.issue.ws.SetTagsAction;
 import org.sonar.server.language.ws.LanguageWs;
index 8c91da197306a654ba584aa75d837056b094883b..e8e6c831c4b8b9e51b8e95d379a2acb97ada5ac9 100644 (file)
@@ -48,7 +48,8 @@ public abstract class AbstractUserSession<T extends AbstractUserSession> impleme
   protected HashMultimap<String, String> projectKeyByPermission = HashMultimap.create();
   protected HashMultimap<String, String> projectUuidByPermission = HashMultimap.create();
   protected Map<String, String> projectUuidByComponentUuid = newHashMap();
-  protected List<String> projectPermissions = newArrayList();
+  protected List<String> projectPermissionsCheckedByKey = newArrayList();
+  protected List<String> projectPermissionsCheckedByUuid = newArrayList();
   protected String name;
   protected Locale locale = Locale.ENGLISH;
 
index 454caa863d56e11b4bf8de9f63ae288d2c20a501..74580dc49098288796e9fc406b2fa376d0aa996d 100644 (file)
@@ -75,19 +75,19 @@ public class ServerUserSession extends AbstractUserSession<ServerUserSession>
 
   @Override
   public boolean hasProjectPermission(String permission, String projectKey) {
-    if (!projectPermissions.contains(permission)) {
+    if (!projectPermissionsCheckedByKey.contains(permission)) {
       Collection<String> projectKeys = authorizationDao.selectAuthorizedRootProjectsKeys(userId, permission);
       for (String key : projectKeys) {
         projectKeyByPermission.put(permission, key);
       }
-      projectPermissions.add(permission);
+      projectPermissionsCheckedByKey.add(permission);
     }
     return projectKeyByPermission.get(permission).contains(projectKey);
   }
 
   @Override
   public boolean hasProjectPermissionByUuid(String permission, String projectUuid) {
-    if (!projectPermissions.contains(permission)) {
+    if (!projectPermissionsCheckedByUuid.contains(permission)) {
       Collection<String> projectUuids = authorizationDao.selectAuthorizedRootProjectsUuids(userId, permission);
       addProjectPermission(permission, projectUuids);
     }
@@ -98,7 +98,7 @@ public class ServerUserSession extends AbstractUserSession<ServerUserSession>
     for (String key : authorizedProjectUuids) {
       projectUuidByPermission.put(permission, key);
     }
-    projectPermissions.add(permission);
+    projectPermissionsCheckedByUuid.add(permission);
   }
 
   @Override
index 25b5f2081c92c99d068359638efbdfdebc203a49..6eb56702ffa0f2f68ad2260f4e03a73bc5e7441c 100644 (file)
@@ -52,7 +52,7 @@ public class MockUserSession extends AbstractUserSession<MockUserSession> implem
     this.projectKeyByPermission = ruleUserSession.projectKeyByPermission;
     this.projectUuidByPermission = ruleUserSession.projectUuidByPermission;
     this.projectUuidByComponentUuid = ruleUserSession.projectUuidByComponentUuid;
-    this.projectPermissions = ruleUserSession.projectPermissions;
+    this.projectPermissionsCheckedByKey = ruleUserSession.projectPermissionsCheckedByKey;
     this.name = ruleUserSession.name;
     this.locale = ruleUserSession.locale;
   }
@@ -97,13 +97,13 @@ public class MockUserSession extends AbstractUserSession<MockUserSession> implem
    */
   @Deprecated
   public MockUserSession addProjectPermissions(String projectPermission, String... projectKeys) {
-    this.projectPermissions.add(projectPermission);
+    this.projectPermissionsCheckedByKey.add(projectPermission);
     this.projectKeyByPermission.putAll(projectPermission, newArrayList(projectKeys));
     return this;
   }
 
   public MockUserSession addProjectUuidPermissions(String projectPermission, String... projectUuids) {
-    this.projectPermissions.add(projectPermission);
+    this.projectPermissionsCheckedByUuid.add(projectPermission);
     this.projectUuidByPermission.putAll(projectPermission, newArrayList(projectUuids));
     return this;
   }
@@ -131,12 +131,12 @@ public class MockUserSession extends AbstractUserSession<MockUserSession> implem
 
   @Override
   public boolean hasProjectPermission(String permission, String projectKey) {
-    return projectPermissions.contains(permission) && projectKeyByPermission.get(permission).contains(projectKey);
+    return projectPermissionsCheckedByKey.contains(permission) && projectKeyByPermission.get(permission).contains(projectKey);
   }
 
   @Override
   public boolean hasProjectPermissionByUuid(String permission, String projectUuid) {
-    return projectPermissions.contains(permission) && projectUuidByPermission.get(permission).contains(projectUuid);
+    return projectPermissionsCheckedByUuid.contains(permission) && projectUuidByPermission.get(permission).contains(projectUuid);
   }
 
   @Override