aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2017-01-29 17:08:59 +0100
committerSimon Brandhof <simon.brandhof@sonarsource.com>2017-02-01 17:11:52 +0100
commitbd8c009b98b373b4916ea586becabf5ae989f64a (patch)
tree339e2aaa86e7a715b4c3c2ab1e8e1cda42c05542
parent54c908420bee1f6a0920e0b19bfcea194f2e3a7d (diff)
downloadsonarqube-bd8c009b98b373b4916ea586becabf5ae989f64a.tar.gz
sonarqube-bd8c009b98b373b4916ea586becabf5ae989f64a.zip
SONAR-8716 Add methods in UserSession with ComponentDto parameters.
The new methods hasComponentPermission(String,ComponentDto) and checkComponentPermission(String,ComponentDto) will help to drop the same methods with key/uuid String parameters.
-rw-r--r--server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java12
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java14
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java6
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java13
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java21
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/AbstractMockUserSession.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java13
7 files changed, 83 insertions, 2 deletions
diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java b/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java
index 39f6f821fa4..0e15807fe29 100644
--- a/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java
+++ b/server/sonar-ce/src/main/java/org/sonar/ce/user/CeUserSession.java
@@ -19,8 +19,10 @@
*/
package org.sonar.ce.user;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.user.GroupDto;
import org.sonar.server.user.UserSession;
@@ -105,6 +107,11 @@ public class CeUserSession implements UserSession {
}
@Override
+ public UserSession checkComponentPermission(String projectPermission, ComponentDto component) {
+ return notImplemented();
+ }
+
+ @Override
public UserSession checkComponentPermission(String projectPermission, String componentKey) {
return notImplemented();
}
@@ -115,6 +122,11 @@ public class CeUserSession implements UserSession {
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return notImplementedBooleanMethod();
+ }
+
+ @Override
public boolean hasComponentPermission(String permission, String componentKey) {
return notImplementedBooleanMethod();
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java
index a61b44710e1..76335c8b83d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java
@@ -19,6 +19,7 @@
*/
package org.sonar.server.user;
+import org.sonar.db.component.ComponentDto;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.UnauthorizedException;
@@ -72,6 +73,19 @@ public abstract class AbstractUserSession implements UserSession {
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return hasComponentUuidPermission(permission, component.projectUuid());
+ }
+
+ @Override
+ public UserSession checkComponentPermission(String projectPermission, ComponentDto component) {
+ if (!hasComponentPermission(projectPermission, component)) {
+ throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE);
+ }
+ return this;
+ }
+
+ @Override
public UserSession checkComponentPermission(String projectPermission, String componentKey) {
if (!hasComponentPermission(projectPermission, componentKey)) {
throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java b/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java
index 3d08fc487e5..d5242f0af6b 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java
@@ -26,6 +26,7 @@ import java.util.Set;
import org.sonar.api.security.DefaultGroups;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.user.GroupDto;
+import org.sonar.db.component.ComponentDto;
/**
* Allow code to be executed with the highest privileges possible, as if executed by a {@link GlobalPermissions#SYSTEM_ADMIN} account.
@@ -119,6 +120,11 @@ public final class DoPrivileged {
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return true;
+ }
+
+ @Override
public boolean hasComponentPermission(String permission, String componentKey) {
return true;
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java
index db21fb6b49b..9692239f592 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java
@@ -19,9 +19,11 @@
*/
package org.sonar.server.user;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.user.GroupDto;
import org.sonar.server.exceptions.UnauthorizedException;
@@ -119,6 +121,12 @@ public class ThreadLocalUserSession implements UserSession {
}
@Override
+ public UserSession checkComponentPermission(String projectPermission, ComponentDto component) {
+ get().checkComponentPermission(projectPermission, component);
+ return this;
+ }
+
+ @Override
public UserSession checkComponentPermission(String projectPermission, String componentKey) {
get().checkComponentPermission(projectPermission, componentKey);
return this;
@@ -131,6 +139,11 @@ public class ThreadLocalUserSession implements UserSession {
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return get().hasComponentPermission(permission, component);
+ }
+
+ @Override
public boolean hasComponentPermission(String permission, String componentKey) {
return get().hasComponentPermission(permission, componentKey);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
index bb6b2eb662f..9ccd1d380f4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java
@@ -19,10 +19,12 @@
*/
package org.sonar.server.user;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
import org.sonar.api.security.DefaultGroups;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.user.GroupDto;
public interface UserSession {
@@ -71,7 +73,7 @@ public interface UserSession {
/**
* Ensures that permission is granted to user, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}.
-
+
* @deprecated in 6.3 because it doesn't support organizations
* @see org.sonar.core.permission.GlobalPermissions
* @see #checkIsRoot() for system administrators
@@ -82,7 +84,7 @@ public interface UserSession {
/**
* Does the user have the given permission ?
-
+
* @deprecated in 6.3 because if doesn't support organizations
* @see org.sonar.core.permission.GlobalPermissions
* @see #isRoot()
@@ -112,6 +114,15 @@ public interface UserSession {
List<String> globalPermissions();
/**
+ * Ensures that permission is granted to user, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}.
+ * If the component doesn't exist and the user doesn't have the permission, throws
+ * a {@link org.sonar.server.exceptions.ForbiddenException}.
+ *
+ * @see org.sonar.api.web.UserRole for list of project permissions
+ */
+ UserSession checkComponentPermission(String projectPermission, ComponentDto component);
+
+ /**
* Ensures that permission is granted to user on the specified component, otherwise throws
* a {@link org.sonar.server.exceptions.ForbiddenException}.
* If the component doesn't exist and the user doesn't have the global permission,
@@ -127,6 +138,12 @@ public interface UserSession {
UserSession checkComponentUuidPermission(String permission, String componentUuid);
/**
+ * Whether the user has the permission on the component. Returns {@code false}
+ * if the component does not exist in database.
+ */
+ boolean hasComponentPermission(String permission, ComponentDto component);
+
+ /**
* Does the user have the given permission for a component key ?
*
* First, check if the user has the global permission (even if the component doesn't exist)
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/AbstractMockUserSession.java b/server/sonar-server/src/test/java/org/sonar/server/tester/AbstractMockUserSession.java
index 56261cd7e3c..6d5fcb00e82 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/AbstractMockUserSession.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/AbstractMockUserSession.java
@@ -29,6 +29,7 @@ import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import org.sonar.api.security.DefaultGroups;
+import org.sonar.db.component.ComponentDto;
import org.sonar.server.user.AbstractUserSession;
import static com.google.common.collect.Lists.newArrayList;
@@ -111,6 +112,11 @@ public abstract class AbstractMockUserSession<T extends AbstractMockUserSession>
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return hasComponentUuidPermission(permission, component.projectUuid());
+ }
+
+ @Override
public boolean hasComponentPermission(String permission, String componentKey) {
String projectKey = projectKeyByComponentKey.get(componentKey);
return hasPermission(permission) || (projectKey != null && hasProjectPermission(permission, projectKey));
diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
index 1798c27d534..d2ebacdd2b0 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java
@@ -20,6 +20,7 @@
package org.sonar.server.tester;
import com.google.common.base.Preconditions;
+import java.util.Collection;
import java.util.List;
import java.util.Set;
import javax.annotation.CheckForNull;
@@ -27,6 +28,7 @@ import javax.annotation.Nullable;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
+import org.sonar.db.component.ComponentDto;
import org.sonar.db.organization.OrganizationDto;
import org.sonar.db.user.GroupDto;
import org.sonar.db.user.UserDto;
@@ -255,6 +257,11 @@ public class UserSessionRule implements TestRule, UserSession {
}
@Override
+ public boolean hasComponentPermission(String permission, ComponentDto component) {
+ return hasComponentUuidPermission(permission, component.projectUuid());
+ }
+
+ @Override
public boolean hasComponentPermission(String permission, String componentKey) {
return currentUserSession.hasComponentPermission(permission, componentKey);
}
@@ -331,6 +338,12 @@ public class UserSessionRule implements TestRule, UserSession {
}
@Override
+ public UserSession checkComponentPermission(String projectPermission, ComponentDto component) {
+ currentUserSession.checkComponentPermission(projectPermission, component);
+ return this;
+ }
+
+ @Override
public UserSession checkComponentPermission(String projectPermission, String componentKey) {
currentUserSession.checkComponentPermission(projectPermission, componentKey);
return this;