GetState: Skip including capabilities when using a non default permission backend
If a non default permission backend is used, default capabilities cannot
be retrieved and the request fails.
Release-Notes: skip
Change-Id: I49be38ca6041a396a58546fc72687cebc9a17161
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/Documentation/rest-api-accounts.txt b/Documentation/rest-api-accounts.txt
index 4d508e9..5fb1fc4 100644
--- a/Documentation/rest-api-accounts.txt
+++ b/Documentation/rest-api-accounts.txt
@@ -2363,19 +2363,20 @@
[options="header",cols="1,^2,4"]
|==========================
-|Field Name |Description
-|`account` |
+|Field Name ||Description
+|`account` ||
The account details as link:#account-detail-info[AccountDetailInfo] entity.
-|`capabilities`|
+|`capabilities`|optional|
The global capabilities of the account as a
-link:#capability-info[CapabilityInfo] entity.
-|`groups` |
+link:#capability-info[CapabilityInfo] entity. Not set if the permission backend
+doesn't use default capabilities.
+|`groups` ||
The groups that contain the account as a member as a list of
link:rest-api-groups.html#group-info[GroupInfo] entries.
-|`external_ids`|
+|`external_ids`||
The external IDs of the account as a list of
link:#account-external-id-info[AccountExternalIdInfo] entities.
-|`metadata` |
+|`metadata` ||
Optional account metadata as a list of
link:account-metadata-info[AccountMetadataInfo] entities. If and which metadata
is provided depends on the Gerrit setup.
diff --git a/java/com/google/gerrit/server/restapi/account/GetState.java b/java/com/google/gerrit/server/restapi/account/GetState.java
index d8684c1..b18e61c 100644
--- a/java/com/google/gerrit/server/restapi/account/GetState.java
+++ b/java/com/google/gerrit/server/restapi/account/GetState.java
@@ -27,6 +27,7 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.account.AccountResource;
import com.google.gerrit.server.account.AccountStateProvider;
+import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.plugincontext.PluginSetContext;
import com.google.inject.Inject;
@@ -45,6 +46,7 @@
*/
@Singleton
public class GetState implements RestReadView<AccountResource> {
+ private final PermissionBackend permissionBackend;
private final Provider<CurrentUser> self;
private final Provider<GetCapabilities> getCapabilities;
private final GetDetail getDetail;
@@ -54,12 +56,14 @@
@Inject
GetState(
+ PermissionBackend permissionBackend,
Provider<CurrentUser> self,
Provider<GetCapabilities> getCapabilities,
GetDetail getDetail,
GetGroups getGroups,
GetExternalIds getExternalIds,
PluginSetContext<AccountStateProvider> accountStateProviders) {
+ this.permissionBackend = permissionBackend;
this.self = self;
this.getCapabilities = getCapabilities;
this.getDetail = getDetail;
@@ -81,7 +85,11 @@
AccountStateInfo accountState = new AccountStateInfo();
accountState.account = getDetail.apply(rsrc).value();
- accountState.capabilities = getCapabilities.get().apply(rsrc).value();
+
+ if (permissionBackend.usesDefaultCapabilities()) {
+ accountState.capabilities = getCapabilities.get().apply(rsrc).value();
+ }
+
accountState.groups = getGroups.apply(rsrc).value();
accountState.externalIds = getExternalIds.apply(rsrc).value();
accountState.metadata = getMetadata(rsrc.getUser().getAccountId());