Add query option allowing administrators to skip visibility filtering
If an administrator wants to reindex changes which were created or updated in a given period based on a query for that period the query results are subject to visibility filtering. This can have the effect that e.g. private changes are missed. Add a query option "skip-visibility" to allow administrators to skip visibility filtering. Change-Id: I66c13659587b9459eb7cc585697c1655926ceac3
This commit is contained in:
@@ -27,13 +27,17 @@ import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||
import com.google.gerrit.index.query.QueryParseException;
|
||||
import com.google.gerrit.index.query.QueryRequiresAuthException;
|
||||
import com.google.gerrit.index.query.QueryResult;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.DynamicOptions;
|
||||
import com.google.gerrit.server.change.ChangeJson;
|
||||
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.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryProcessor;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
@@ -46,6 +50,8 @@ public class QueryChanges implements RestReadView<TopLevelResource>, DynamicOpti
|
||||
private final ChangeJson.Factory json;
|
||||
private final ChangeQueryBuilder qb;
|
||||
private final ChangeQueryProcessor imp;
|
||||
private final Provider<CurrentUser> userProvider;
|
||||
private final PermissionBackend permissionBackend;
|
||||
private EnumSet<ListChangesOption> options;
|
||||
|
||||
@Option(
|
||||
@@ -88,16 +94,32 @@ public class QueryChanges implements RestReadView<TopLevelResource>, DynamicOpti
|
||||
imp.setNoLimit(on);
|
||||
}
|
||||
|
||||
@Option(name = "--skip-visibility", usage = "Skip visibility check, only for administrators")
|
||||
public void skipVisibility(boolean on) throws AuthException, PermissionBackendException {
|
||||
if (on) {
|
||||
CurrentUser user = userProvider.get();
|
||||
permissionBackend.user(user).check(GlobalPermission.ADMINISTRATE_SERVER);
|
||||
imp.enforceVisibility(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDynamicBean(String plugin, DynamicOptions.DynamicBean dynamicBean) {
|
||||
imp.setDynamicBean(plugin, dynamicBean);
|
||||
}
|
||||
|
||||
@Inject
|
||||
QueryChanges(ChangeJson.Factory json, ChangeQueryBuilder qb, ChangeQueryProcessor qp) {
|
||||
QueryChanges(
|
||||
ChangeJson.Factory json,
|
||||
ChangeQueryBuilder qb,
|
||||
ChangeQueryProcessor qp,
|
||||
Provider<CurrentUser> userProvider,
|
||||
PermissionBackend permissionBackend) {
|
||||
this.json = json;
|
||||
this.qb = qb;
|
||||
this.imp = qp;
|
||||
this.userProvider = userProvider;
|
||||
this.permissionBackend = permissionBackend;
|
||||
|
||||
options = EnumSet.noneOf(ListChangesOption.class);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user