Move {Ref,Change,Project}Control into permissions package

This is the last commit of a longer series to hide the internal
implementation of Gerrit's permission schema and have all calls go
through PermissionBackend.

This commit moves all Control classes into server/permissions to avoid
direct calling from other classes in server/project.

Change-Id: Ifc8f0d3838fefafbb69bb4f0dfc5ca513a41b906
This commit is contained in:
Patrick Hiesel
2018-01-18 19:44:37 +01:00
parent d0d9331b5b
commit cd5265bd0f
19 changed files with 72 additions and 72 deletions

View File

@@ -73,10 +73,10 @@ import com.google.gerrit.server.mime.MimeUtil2Module;
import com.google.gerrit.server.notedb.GroupsMigration; import com.google.gerrit.server.notedb.GroupsMigration;
import com.google.gerrit.server.notedb.NotesMigration; import com.google.gerrit.server.notedb.NotesMigration;
import com.google.gerrit.server.patch.DiffExecutorModule; import com.google.gerrit.server.patch.DiffExecutorModule;
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
import com.google.gerrit.server.plugins.PluginGuiceEnvironment; import com.google.gerrit.server.plugins.PluginGuiceEnvironment;
import com.google.gerrit.server.plugins.PluginModule; import com.google.gerrit.server.plugins.PluginModule;
import com.google.gerrit.server.plugins.PluginRestApiModule; import com.google.gerrit.server.plugins.PluginRestApiModule;
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
import com.google.gerrit.server.project.DefaultProjectNameLockManager; import com.google.gerrit.server.project.DefaultProjectNameLockManager;
import com.google.gerrit.server.restapi.config.RestCacheAdminModule; import com.google.gerrit.server.restapi.config.RestCacheAdminModule;
import com.google.gerrit.server.schema.DataSourceModule; import com.google.gerrit.server.schema.DataSourceModule;

View File

@@ -82,10 +82,10 @@ import com.google.gerrit.server.mime.MimeUtil2Module;
import com.google.gerrit.server.notedb.rebuild.NoteDbMigrator; import com.google.gerrit.server.notedb.rebuild.NoteDbMigrator;
import com.google.gerrit.server.notedb.rebuild.OnlineNoteDbMigrator; import com.google.gerrit.server.notedb.rebuild.OnlineNoteDbMigrator;
import com.google.gerrit.server.patch.DiffExecutorModule; import com.google.gerrit.server.patch.DiffExecutorModule;
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
import com.google.gerrit.server.plugins.PluginGuiceEnvironment; import com.google.gerrit.server.plugins.PluginGuiceEnvironment;
import com.google.gerrit.server.plugins.PluginModule; import com.google.gerrit.server.plugins.PluginModule;
import com.google.gerrit.server.plugins.PluginRestApiModule; import com.google.gerrit.server.plugins.PluginRestApiModule;
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
import com.google.gerrit.server.project.DefaultProjectNameLockManager; import com.google.gerrit.server.project.DefaultProjectNameLockManager;
import com.google.gerrit.server.restapi.config.RestCacheAdminModule; import com.google.gerrit.server.restapi.config.RestCacheAdminModule;
import com.google.gerrit.server.schema.DataSourceProvider; import com.google.gerrit.server.schema.DataSourceProvider;

View File

@@ -60,12 +60,12 @@ import com.google.gerrit.server.mail.send.ReplacePatchSetSender;
import com.google.gerrit.server.notedb.NoteDbModule; import com.google.gerrit.server.notedb.NoteDbModule;
import com.google.gerrit.server.patch.DiffExecutorModule; import com.google.gerrit.server.patch.DiffExecutorModule;
import com.google.gerrit.server.patch.PatchListCacheImpl; import com.google.gerrit.server.patch.PatchListCacheImpl;
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
import com.google.gerrit.server.permissions.SectionSortCache;
import com.google.gerrit.server.project.CommentLinkProvider; import com.google.gerrit.server.project.CommentLinkProvider;
import com.google.gerrit.server.project.CommitResource; import com.google.gerrit.server.project.CommitResource;
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
import com.google.gerrit.server.project.ProjectCacheImpl; import com.google.gerrit.server.project.ProjectCacheImpl;
import com.google.gerrit.server.project.ProjectState; import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.project.SectionSortCache;
import com.google.gerrit.server.project.SubmitRuleEvaluator; import com.google.gerrit.server.project.SubmitRuleEvaluator;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeQueryProcessor; import com.google.gerrit.server.query.change.ChangeQueryProcessor;

View File

@@ -159,14 +159,14 @@ import com.google.gerrit.server.notedb.NoteDbModule;
import com.google.gerrit.server.patch.PatchListCacheImpl; import com.google.gerrit.server.patch.PatchListCacheImpl;
import com.google.gerrit.server.patch.PatchScriptFactory; import com.google.gerrit.server.patch.PatchScriptFactory;
import com.google.gerrit.server.patch.PatchSetInfoFactory; import com.google.gerrit.server.patch.PatchSetInfoFactory;
import com.google.gerrit.server.permissions.PermissionCollection;
import com.google.gerrit.server.permissions.SectionSortCache;
import com.google.gerrit.server.plugins.ReloadPluginListener; import com.google.gerrit.server.plugins.ReloadPluginListener;
import com.google.gerrit.server.project.AccessControlModule; import com.google.gerrit.server.project.AccessControlModule;
import com.google.gerrit.server.project.CommentLinkProvider; import com.google.gerrit.server.project.CommentLinkProvider;
import com.google.gerrit.server.project.PermissionCollection;
import com.google.gerrit.server.project.ProjectCacheImpl; import com.google.gerrit.server.project.ProjectCacheImpl;
import com.google.gerrit.server.project.ProjectNameLockManager; import com.google.gerrit.server.project.ProjectNameLockManager;
import com.google.gerrit.server.project.ProjectState; import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.project.SectionSortCache;
import com.google.gerrit.server.project.SubmitRuleEvaluator; import com.google.gerrit.server.project.SubmitRuleEvaluator;
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;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Preconditions.checkState;
import static com.google.gerrit.server.permissions.LabelPermission.ForUser.ON_BEHALF_OF; import static com.google.gerrit.server.permissions.LabelPermission.ForUser.ON_BEHALF_OF;
@@ -34,12 +34,7 @@ import com.google.gerrit.server.ApprovalsUtil;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.PatchSetUtil; import com.google.gerrit.server.PatchSetUtil;
import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.permissions.ChangePermission;
import com.google.gerrit.server.permissions.ChangePermissionOrLabel;
import com.google.gerrit.server.permissions.LabelPermission;
import com.google.gerrit.server.permissions.PermissionBackend.ForChange; import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.RefPermission;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject; import com.google.inject.Inject;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.stream.Collectors.toSet; import static java.util.stream.Collectors.toSet;
@@ -28,10 +28,9 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.PeerDaemonUser; import com.google.gerrit.server.PeerDaemonUser;
import com.google.gerrit.server.account.CapabilityCollection; import com.google.gerrit.server.account.CapabilityCollection;
import com.google.gerrit.server.permissions.FailedPermissionBackend; import com.google.gerrit.server.project.NoSuchProjectException;
import com.google.gerrit.server.permissions.GlobalPermission; import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import java.io.IOException; import java.io.IOException;

View File

@@ -12,10 +12,9 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
/** Binds the default {@link PermissionBackend}. */ /** Binds the default {@link PermissionBackend}. */

View File

@@ -27,7 +27,6 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.project.DefaultPermissionBackend;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.inject.ImplementedBy; import com.google.inject.ImplementedBy;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.base.MoreObjects.firstNonNull;
import static com.google.gerrit.server.project.RefPattern.isRE; import static com.google.gerrit.server.project.RefPattern.isRE;
@@ -29,6 +29,9 @@ import com.google.gerrit.common.data.PermissionRule;
import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.project.RefPattern;
import com.google.gerrit.server.project.RefPatternMatcher.ExpandParameters;
import com.google.gerrit.server.project.SectionMatcher;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import java.util.ArrayList; import java.util.ArrayList;
@@ -91,16 +94,16 @@ public class PermissionCollection {
// that will never be shared with non-user references, and the per-user // that will never be shared with non-user references, and the per-user
// references are usually less frequent than the non-user references. // references are usually less frequent than the non-user references.
// //
if (sm.matcher instanceof RefPatternMatcher.ExpandParameters) { if (sm.getMatcher() instanceof ExpandParameters) {
if (!((RefPatternMatcher.ExpandParameters) sm.matcher).matchPrefix(ref)) { if (!((ExpandParameters) sm.getMatcher()).matchPrefix(ref)) {
continue; continue;
} }
perUser = true; perUser = true;
if (sm.match(ref, user)) { if (sm.match(ref, user)) {
sectionToProject.put(sm.section, sm.project); sectionToProject.put(sm.getSection(), sm.getProject());
} }
} else if (sm.match(ref, null)) { } else if (sm.match(ref, null)) {
sectionToProject.put(sm.section, sm.project); sectionToProject.put(sm.getSection(), sm.getProject());
} }
} }
List<AccessSection> sections = Lists.newArrayList(sectionToProject.keySet()); List<AccessSection> sections = Lists.newArrayList(sectionToProject.keySet());

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
@@ -21,9 +21,6 @@ import com.google.gerrit.common.data.AccessSection;
import com.google.gerrit.common.data.Permission; import com.google.gerrit.common.data.Permission;
import com.google.gerrit.common.data.PermissionRule; import com.google.gerrit.common.data.PermissionRule;
import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.metrics.Counter0;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.MetricMaker;
import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Branch;
import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Change;
@@ -36,18 +33,14 @@ import com.google.gerrit.server.config.GitReceivePackGroups;
import com.google.gerrit.server.config.GitUploadPackGroups; import com.google.gerrit.server.config.GitUploadPackGroups;
import com.google.gerrit.server.group.SystemGroupBackend; import com.google.gerrit.server.group.SystemGroupBackend;
import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.permissions.FailedPermissionBackend;
import com.google.gerrit.server.permissions.GlobalPermission;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackend.ForChange; import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
import com.google.gerrit.server.permissions.PermissionBackend.ForProject; import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
import com.google.gerrit.server.permissions.PermissionBackend.ForRef; import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.permissions.ProjectPermission; import com.google.gerrit.server.project.SectionMatcher;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.Assisted;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -64,19 +57,6 @@ class ProjectControl {
ProjectControl create(CurrentUser who, ProjectState ps); ProjectControl create(CurrentUser who, ProjectState ps);
} }
@Singleton
protected static class Metrics {
final Counter0 claCheckCount;
@Inject
Metrics(MetricMaker metricMaker) {
claCheckCount =
metricMaker.newCounter(
"license/cla_check_count",
new Description("Total number of CLA check requests").setRate().setUnit("requests"));
}
}
private final Set<AccountGroup.UUID> uploadGroups; private final Set<AccountGroup.UUID> uploadGroups;
private final Set<AccountGroup.UUID> receiveGroups; private final Set<AccountGroup.UUID> receiveGroups;
private final PermissionBackend permissionBackend; private final PermissionBackend permissionBackend;
@@ -227,7 +207,7 @@ class ProjectControl {
private boolean canCreateChanges() { private boolean canCreateChanges() {
for (SectionMatcher matcher : access()) { for (SectionMatcher matcher : access()) {
AccessSection section = matcher.section; AccessSection section = matcher.getSection();
if (section.getName().startsWith("refs/for/")) { if (section.getName().startsWith("refs/for/")) {
Permission permission = section.getPermission(Permission.PUSH); Permission permission = section.getPermission(Permission.PUSH);
if (permission != null && controlForRef(section.getName()).canPerform(Permission.PUSH)) { if (permission != null && controlForRef(section.getName()).canPerform(Permission.PUSH)) {
@@ -248,7 +228,7 @@ class ProjectControl {
private boolean canPerformOnAnyRef(String permissionName) { private boolean canPerformOnAnyRef(String permissionName) {
for (SectionMatcher matcher : access()) { for (SectionMatcher matcher : access()) {
AccessSection section = matcher.section; AccessSection section = matcher.getSection();
Permission permission = section.getPermission(permissionName); Permission permission = section.getPermission(permissionName);
if (permission == null) { if (permission == null) {
continue; continue;
@@ -297,7 +277,7 @@ class ProjectControl {
private Set<String> allRefPatterns(String permissionName) { private Set<String> allRefPatterns(String permissionName) {
Set<String> all = new HashSet<>(); Set<String> all = new HashSet<>();
for (SectionMatcher matcher : access()) { for (SectionMatcher matcher : access()) {
AccessSection section = matcher.section; AccessSection section = matcher.getSection();
Permission permission = section.getPermission(permissionName); Permission permission = section.getPermission(permissionName);
if (permission != null) { if (permission != null) {
all.add(section.getName()); all.add(section.getName());

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
@@ -26,11 +26,8 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames; import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.server.permissions.FailedPermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackend.ForChange; import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
import com.google.gerrit.server.permissions.PermissionBackend.ForRef; import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.permissions.RefPermission;
import com.google.gerrit.server.query.change.ChangeData; import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.util.MagicBranch; import com.google.gerrit.server.util.MagicBranch;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;

View File

@@ -20,6 +20,9 @@ import com.google.gerrit.common.data.ContributorAgreement;
import com.google.gerrit.common.data.PermissionRule; import com.google.gerrit.common.data.PermissionRule;
import com.google.gerrit.common.data.PermissionRule.Action; import com.google.gerrit.common.data.PermissionRule.Action;
import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.metrics.Counter0;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.MetricMaker;
import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.AccountGroup;
import com.google.gerrit.reviewdb.client.AccountGroup.UUID; import com.google.gerrit.reviewdb.client.AccountGroup.UUID;
import com.google.gerrit.reviewdb.client.BooleanProjectConfig; import com.google.gerrit.reviewdb.client.BooleanProjectConfig;
@@ -27,7 +30,6 @@ import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.config.CanonicalWebUrl; import com.google.gerrit.server.config.CanonicalWebUrl;
import com.google.gerrit.server.project.ProjectControl.Metrics;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import java.io.IOException; import java.io.IOException;
@@ -42,6 +44,19 @@ public class ContributorAgreementsChecker {
private final ProjectCache projectCache; private final ProjectCache projectCache;
private final Metrics metrics; private final Metrics metrics;
@Singleton
protected static class Metrics {
final Counter0 claCheckCount;
@Inject
Metrics(MetricMaker metricMaker) {
claCheckCount =
metricMaker.newCounter(
"license/cla_check_count",
new Description("Total number of CLA check requests").setRate().setUnit("requests"));
}
}
@Inject @Inject
ContributorAgreementsChecker( ContributorAgreementsChecker(
@CanonicalWebUrl @Nullable String canonicalWebUrl, @CanonicalWebUrl @Nullable String canonicalWebUrl,

View File

@@ -310,7 +310,7 @@ public class ProjectState {
* Obtain all local and inherited sections. This collection is looked up dynamically and is not * Obtain all local and inherited sections. This collection is looked up dynamically and is not
* cached. Callers should try to cache this result per-request as much as possible. * cached. Callers should try to cache this result per-request as much as possible.
*/ */
List<SectionMatcher> getAllSections() { public List<SectionMatcher> getAllSections() {
if (isAllProjects) { if (isAllProjects) {
return getLocalAccessSections(); return getLocalAccessSections();
} }
@@ -520,7 +520,7 @@ public class ProjectState {
private static Set<GroupReference> getGroups(List<SectionMatcher> sectionMatcherList) { private static Set<GroupReference> getGroups(List<SectionMatcher> sectionMatcherList) {
final Set<GroupReference> all = new HashSet<>(); final Set<GroupReference> all = new HashSet<>();
for (SectionMatcher matcher : sectionMatcherList) { for (SectionMatcher matcher : sectionMatcherList) {
final AccessSection section = matcher.section; final AccessSection section = matcher.getSection();
for (Permission permission : section.getPermissions()) { for (Permission permission : section.getPermissions()) {
for (PermissionRule rule : permission.getRules()) { for (PermissionRule rule : permission.getRules()) {
all.add(rule.getGroup()); all.add(rule.getGroup());

View File

@@ -83,7 +83,7 @@ public abstract class RefPatternMatcher {
} }
} }
static class ExpandParameters extends RefPatternMatcher { public static class ExpandParameters extends RefPatternMatcher {
private final ParameterizedString template; private final ParameterizedString template;
private final String prefix; private final String prefix;
@@ -148,7 +148,7 @@ public abstract class RefPatternMatcher {
return ImmutableSet.of(); return ImmutableSet.of();
} }
boolean matchPrefix(String ref) { public boolean matchPrefix(String ref) {
return ref.startsWith(prefix); return ref.startsWith(prefix);
} }

View File

@@ -16,6 +16,7 @@ package com.google.gerrit.server.project;
import com.google.gerrit.common.data.AccessSection; import com.google.gerrit.common.data.AccessSection;
import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.Project.NameKey;
import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.CurrentUser;
/** /**
@@ -24,7 +25,7 @@ import com.google.gerrit.server.CurrentUser;
* <p>These matchers are "compiled" versions of the AccessSection name, supporting faster selection * <p>These matchers are "compiled" versions of the AccessSection name, supporting faster selection
* of which sections are relevant to any given input reference. * of which sections are relevant to any given input reference.
*/ */
class SectionMatcher extends RefPatternMatcher { public class SectionMatcher extends RefPatternMatcher {
static SectionMatcher wrap(Project.NameKey project, AccessSection section) { static SectionMatcher wrap(Project.NameKey project, AccessSection section) {
String ref = section.getName(); String ref = section.getName();
if (AccessSection.isValid(ref)) { if (AccessSection.isValid(ref)) {
@@ -33,11 +34,11 @@ class SectionMatcher extends RefPatternMatcher {
return null; return null;
} }
final Project.NameKey project; private final Project.NameKey project;
final AccessSection section; private final AccessSection section;
final RefPatternMatcher matcher; private final RefPatternMatcher matcher;
SectionMatcher(Project.NameKey project, AccessSection section, RefPatternMatcher matcher) { public SectionMatcher(Project.NameKey project, AccessSection section, RefPatternMatcher matcher) {
this.project = project; this.project = project;
this.section = section; this.section = section;
this.matcher = matcher; this.matcher = matcher;
@@ -47,4 +48,16 @@ class SectionMatcher extends RefPatternMatcher {
public boolean match(String ref, CurrentUser user) { public boolean match(String ref, CurrentUser user) {
return this.matcher.match(ref, user); return this.matcher.match(ref, user);
} }
public AccessSection getSection() {
return section;
}
public RefPatternMatcher getMatcher() {
return matcher;
}
public NameKey getProject() {
return project;
}
} }

View File

@@ -67,9 +67,9 @@ import com.google.gerrit.server.notedb.GwtormChangeBundleReader;
import com.google.gerrit.server.notedb.MutableNotesMigration; import com.google.gerrit.server.notedb.MutableNotesMigration;
import com.google.gerrit.server.notedb.NotesMigration; import com.google.gerrit.server.notedb.NotesMigration;
import com.google.gerrit.server.patch.DiffExecutor; import com.google.gerrit.server.patch.DiffExecutor;
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
import com.google.gerrit.server.plugins.PluginRestApiModule; import com.google.gerrit.server.plugins.PluginRestApiModule;
import com.google.gerrit.server.plugins.ServerInformationImpl; import com.google.gerrit.server.plugins.ServerInformationImpl;
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
import com.google.gerrit.server.project.DefaultProjectNameLockManager; import com.google.gerrit.server.project.DefaultProjectNameLockManager;
import com.google.gerrit.server.schema.DataSourceType; import com.google.gerrit.server.schema.DataSourceType;
import com.google.gerrit.server.schema.InMemoryAccountPatchReviewStore; import com.google.gerrit.server.schema.InMemoryAccountPatchReviewStore;

View File

@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
package com.google.gerrit.server.project; package com.google.gerrit.server.permissions;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.gerrit.common.data.Permission.EDIT_TOPIC_NAME; import static com.google.gerrit.common.data.Permission.EDIT_TOPIC_NAME;
@@ -55,9 +55,9 @@ import com.google.gerrit.server.config.AllUsersNameProvider;
import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.git.ProjectConfig; import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.index.SingleVersionModule.SingleVersionListener; import com.google.gerrit.server.index.SingleVersionModule.SingleVersionListener;
import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.permissions.ProjectPermission; import com.google.gerrit.server.project.ProjectState;
import com.google.gerrit.server.permissions.RefPermission; import com.google.gerrit.server.project.RefPattern;
import com.google.gerrit.server.project.testing.Util; import com.google.gerrit.server.project.testing.Util;
import com.google.gerrit.server.rules.PrologEnvironment; import com.google.gerrit.server.rules.PrologEnvironment;
import com.google.gerrit.server.rules.RulesCache; import com.google.gerrit.server.rules.RulesCache;