diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java index 3b6793021c..157928b4f8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Check.java @@ -17,22 +17,38 @@ package com.google.gerrit.server.change; import com.google.gerrit.extensions.api.changes.FixInput; import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.common.ChangeInfo; -import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.RestReadView; -import com.google.gerrit.server.project.ChangeControl; +import com.google.gerrit.server.CurrentUser; +import com.google.gerrit.server.permissions.GlobalPermission; +import com.google.gerrit.server.permissions.PermissionBackend; +import com.google.gerrit.server.permissions.PermissionBackendException; +import com.google.gerrit.server.project.NoSuchProjectException; +import com.google.gerrit.server.project.ProjectControl; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; +import com.google.inject.Provider; +import java.io.IOException; public class Check implements RestReadView<ChangeResource>, RestModifyView<ChangeResource, FixInput> { + private final PermissionBackend permissionBackend; + private final Provider<CurrentUser> user; private final ChangeJson.Factory jsonFactory; + private final ProjectControl.GenericFactory projectControlFactory; @Inject - Check(ChangeJson.Factory json) { + Check( + PermissionBackend permissionBackend, + Provider<CurrentUser> user, + ChangeJson.Factory json, + ProjectControl.GenericFactory projectControlFactory) { + this.permissionBackend = permissionBackend; + this.user = user; this.jsonFactory = json; + this.projectControlFactory = projectControlFactory; } @Override @@ -42,12 +58,11 @@ public class Check @Override public Response<ChangeInfo> apply(ChangeResource rsrc, FixInput input) - throws RestApiException, OrmException { - ChangeControl ctl = rsrc.getControl(); - if (!ctl.isOwner() - && !ctl.getProjectControl().isOwner() - && !ctl.getUser().getCapabilities().canMaintainServer()) { - throw new AuthException("Cannot fix change"); + throws RestApiException, OrmException, PermissionBackendException, NoSuchProjectException, + IOException { + if (!rsrc.isUserOwner() + && !projectControlFactory.controlFor(rsrc.getProject(), rsrc.getUser()).isOwner()) { + permissionBackend.user(user).check(GlobalPermission.MAINTAIN_SERVER); } return Response.withMustRevalidate(newChangeJson().fix(input).format(rsrc)); } |