Rename SingleGroupUser to GroupBackedUser and provide docs
In this change we document existing assumptions in this class. The name is not approriate anymore since we allow for a set of memberships in this class. Hence, we change it. Change-Id: I31db1ef3feac7dad0a538166bb4f8ca209205410
This commit is contained in:
@@ -30,7 +30,7 @@ import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.index.account.AccountField;
|
||||
import com.google.gerrit.server.index.group.GroupField;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.SingleGroupUser;
|
||||
import com.google.gerrit.server.query.change.GroupBackedUser;
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||
@@ -107,7 +107,7 @@ public final class IndexUtils {
|
||||
if (user.isIdentifiedUser()) {
|
||||
return user.getAccountId().toString();
|
||||
}
|
||||
if (user instanceof SingleGroupUser) {
|
||||
if (user instanceof GroupBackedUser) {
|
||||
return "group:" + user.getEffectiveGroups().getKnownGroups().iterator().next().toString();
|
||||
}
|
||||
return user.toString();
|
||||
|
||||
@@ -33,7 +33,7 @@ import com.google.gerrit.server.account.ProjectWatches.ProjectWatchKey;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
import com.google.gerrit.server.query.change.SingleGroupUser;
|
||||
import com.google.gerrit.server.query.change.GroupBackedUser;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -150,7 +150,7 @@ public class ProjectWatch {
|
||||
throws QueryParseException {
|
||||
logger.atFine().log("Checking watchers for notify config %s from project %s", nc, projectName);
|
||||
for (GroupReference groupRef : nc.getGroups()) {
|
||||
CurrentUser user = new SingleGroupUser(groupRef.getUUID());
|
||||
CurrentUser user = new GroupBackedUser(ImmutableSet.of(groupRef.getUUID()));
|
||||
if (filterMatch(user, nc.getFilter())) {
|
||||
deliverToMembers(matching.list(nc.getHeader()), groupRef.getUUID());
|
||||
logger.atFine().log("Added watchers for group %s", groupRef);
|
||||
|
||||
@@ -88,7 +88,7 @@ public class ChangeIsVisibleToPredicate extends IsVisibleToPredicate<ChangeData>
|
||||
? permissionBackend.absentUser(user.getAccountId())
|
||||
: permissionBackend.user(
|
||||
Optional.of(user)
|
||||
.filter(u -> u instanceof SingleGroupUser || u instanceof InternalUser)
|
||||
.filter(u -> u instanceof GroupBackedUser || u instanceof InternalUser)
|
||||
.orElseGet(anonymousUserProvider::get));
|
||||
try {
|
||||
withUser.change(cd).check(ChangePermission.READ);
|
||||
|
||||
@@ -1026,7 +1026,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData, ChangeQueryBuil
|
||||
for (GroupReference ref : suggestions) {
|
||||
ids.add(ref.getUUID());
|
||||
}
|
||||
return visibleto(new SingleGroupUser(ids));
|
||||
return visibleto(new GroupBackedUser(ids));
|
||||
}
|
||||
|
||||
throw error("No user or group matches \"" + who + "\".");
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
// Copyright (C) 2009 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.query.change;
|
||||
|
||||
import com.google.gerrit.entities.AccountGroup;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.account.GroupMembership;
|
||||
import com.google.gerrit.server.account.ListGroupMembership;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Representation of a user that does not have a Gerrit account.
|
||||
*
|
||||
* <p>This user representation is intended to be used for two purposes:
|
||||
*
|
||||
* <ol>
|
||||
* <li>Checking permissions for groups: There are occasions where we need to check if a resource -
|
||||
* such as a change - is accessible by a group. Our entire {@link
|
||||
* com.google.gerrit.server.permissions.PermissionBackend} works solely with {@link
|
||||
* CurrentUser}. This class can be used to check permissions on a synthetic user with the
|
||||
* given group memberships. Any real Gerrit user with the same group memberships would receive
|
||||
* the same permission check results.
|
||||
* <li>Checking permissions for an external user: In installations with external group systems,
|
||||
* one might want to check what Gerrit permissions a user has, before or even without creating
|
||||
* a Gerrit account. Such an external user has external group memberships only as well as
|
||||
* internal groups that contain the user's external groups as subgroups. This class can be
|
||||
* used to represent such an external user.
|
||||
* </ol>
|
||||
*/
|
||||
public final class GroupBackedUser extends CurrentUser {
|
||||
private final GroupMembership groups;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param groups this set has to include all parent groups the user is contained in through
|
||||
* subgroup membership. Given a set of groups that contains the user directly, callers can use
|
||||
* {@link
|
||||
* com.google.gerrit.server.account.GroupIncludeCache#parentGroupsOf(AccountGroup.UUID)} to
|
||||
* resolve parent groups.
|
||||
*/
|
||||
public GroupBackedUser(Set<AccountGroup.UUID> groups) {
|
||||
this.groups = new ListGroupMembership(groups);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupMembership getEffectiveGroups() {
|
||||
return groups;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoggableName() {
|
||||
return "GroupBackedUser with memberships: " + groups.getKnownGroups();
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
// Copyright (C) 2009 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.query.change;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.gerrit.entities.AccountGroup;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.account.GroupMembership;
|
||||
import com.google.gerrit.server.account.ListGroupMembership;
|
||||
import java.util.Set;
|
||||
|
||||
public final class SingleGroupUser extends CurrentUser {
|
||||
private final GroupMembership groups;
|
||||
|
||||
public SingleGroupUser(AccountGroup.UUID groupId) {
|
||||
this(ImmutableSet.of(groupId));
|
||||
}
|
||||
|
||||
public SingleGroupUser(Set<AccountGroup.UUID> groups) {
|
||||
this.groups = new ListGroupMembership(groups);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupMembership getEffectiveGroups() {
|
||||
return groups;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user