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.account.AccountField;
|
||||||
import com.google.gerrit.server.index.group.GroupField;
|
import com.google.gerrit.server.index.group.GroupField;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
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.io.IOException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.eclipse.jgit.errors.ConfigInvalidException;
|
import org.eclipse.jgit.errors.ConfigInvalidException;
|
||||||
@@ -107,7 +107,7 @@ public final class IndexUtils {
|
|||||||
if (user.isIdentifiedUser()) {
|
if (user.isIdentifiedUser()) {
|
||||||
return user.getAccountId().toString();
|
return user.getAccountId().toString();
|
||||||
}
|
}
|
||||||
if (user instanceof SingleGroupUser) {
|
if (user instanceof GroupBackedUser) {
|
||||||
return "group:" + user.getEffectiveGroups().getKnownGroups().iterator().next().toString();
|
return "group:" + user.getEffectiveGroups().getKnownGroups().iterator().next().toString();
|
||||||
}
|
}
|
||||||
return user.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.project.ProjectState;
|
||||||
import com.google.gerrit.server.query.change.ChangeData;
|
import com.google.gerrit.server.query.change.ChangeData;
|
||||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
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.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -150,7 +150,7 @@ public class ProjectWatch {
|
|||||||
throws QueryParseException {
|
throws QueryParseException {
|
||||||
logger.atFine().log("Checking watchers for notify config %s from project %s", nc, projectName);
|
logger.atFine().log("Checking watchers for notify config %s from project %s", nc, projectName);
|
||||||
for (GroupReference groupRef : nc.getGroups()) {
|
for (GroupReference groupRef : nc.getGroups()) {
|
||||||
CurrentUser user = new SingleGroupUser(groupRef.getUUID());
|
CurrentUser user = new GroupBackedUser(ImmutableSet.of(groupRef.getUUID()));
|
||||||
if (filterMatch(user, nc.getFilter())) {
|
if (filterMatch(user, nc.getFilter())) {
|
||||||
deliverToMembers(matching.list(nc.getHeader()), groupRef.getUUID());
|
deliverToMembers(matching.list(nc.getHeader()), groupRef.getUUID());
|
||||||
logger.atFine().log("Added watchers for group %s", groupRef);
|
logger.atFine().log("Added watchers for group %s", groupRef);
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class ChangeIsVisibleToPredicate extends IsVisibleToPredicate<ChangeData>
|
|||||||
? permissionBackend.absentUser(user.getAccountId())
|
? permissionBackend.absentUser(user.getAccountId())
|
||||||
: permissionBackend.user(
|
: permissionBackend.user(
|
||||||
Optional.of(user)
|
Optional.of(user)
|
||||||
.filter(u -> u instanceof SingleGroupUser || u instanceof InternalUser)
|
.filter(u -> u instanceof GroupBackedUser || u instanceof InternalUser)
|
||||||
.orElseGet(anonymousUserProvider::get));
|
.orElseGet(anonymousUserProvider::get));
|
||||||
try {
|
try {
|
||||||
withUser.change(cd).check(ChangePermission.READ);
|
withUser.change(cd).check(ChangePermission.READ);
|
||||||
|
|||||||
@@ -1026,7 +1026,7 @@ public class ChangeQueryBuilder extends QueryBuilder<ChangeData, ChangeQueryBuil
|
|||||||
for (GroupReference ref : suggestions) {
|
for (GroupReference ref : suggestions) {
|
||||||
ids.add(ref.getUUID());
|
ids.add(ref.getUUID());
|
||||||
}
|
}
|
||||||
return visibleto(new SingleGroupUser(ids));
|
return visibleto(new GroupBackedUser(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw error("No user or group matches \"" + who + "\".");
|
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