]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6307 Add permission check on change_parent action
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 15 Apr 2015 07:34:04 +0000 (09:34 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Wed, 15 Apr 2015 07:34:04 +0000 (09:34 +0200)
server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentAction.java
server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentActionMediumTest.java

index 2401854a00a2ac35bf2a9fd81f73993dd8c0481b..59f28d38c8863eed58fe14206dc60a640f423ef8 100644 (file)
@@ -25,10 +25,12 @@ import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService.NewAction;
 import org.sonar.api.server.ws.WebService.NewController;
+import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.qualityprofile.QProfileFactory;
 import org.sonar.server.qualityprofile.RuleActivator;
+import org.sonar.server.user.UserSession;
 
 import static org.apache.commons.lang.StringUtils.isEmpty;
 
@@ -75,6 +77,8 @@ public class QProfileChangeParentAction implements BaseQProfileWsAction {
 
   @Override
   public void handle(Request request, Response response) throws Exception {
+    UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN);
+
     DbSession session = dbClient.openSession(false);
     try {
       String profileKey = QProfileIdentificationParamUtils.getProfileKeyFromParameters(request, profileFactory, session);
index 6db542c2ffe7f9f8f5f91c823c6f0cabbd17f8b7..433a343967b044f880606cbf4ccfeaf7bb2bfbbb 100644 (file)
@@ -32,6 +32,7 @@ import org.sonar.core.qualityprofile.db.ActiveRuleDto;
 import org.sonar.core.qualityprofile.db.QualityProfileDto;
 import org.sonar.core.rule.RuleDto;
 import org.sonar.server.db.DbClient;
+import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.qualityprofile.QProfileName;
 import org.sonar.server.qualityprofile.QProfileTesting;
 import org.sonar.server.qualityprofile.RuleActivator;
@@ -254,6 +255,15 @@ public class QProfileChangeParentActionMediumTest {
       .execute();
   }
 
+  @Test(expected = ForbiddenException.class)
+  public void fail_if_missing_permission() throws Exception {
+    MockUserSession.set().setLogin("anakin");
+    wsTester.newGetRequest(QProfilesWs.API_ENDPOINT, "change_parent")
+      .setParam(QProfileIdentificationParamUtils.PARAM_PROFILE_KEY, "polop")
+      .setParam("parentKey", "pulup")
+      .execute();
+  }
+
   private QualityProfileDto createProfile(String lang, String name) {
     QualityProfileDto profile = QProfileTesting.newDto(new QProfileName(lang, name), "p" + lang + "-" + name.toLowerCase());
     db.qualityProfileDao().insert(session, profile);