Convert reading project access to use PermissionBackend

Reading the access sections for a project requires ACCESS
permission, as the handlers filter references and groups
depending on the caller.

Change-Id: Ie5a3d58b5456593db6e6ac9725bb981bcef8b3a8
This commit is contained in:
Shawn Pearce
2017-02-23 12:07:36 -08:00
committed by David Pursehouse
parent 17ab8ce41e
commit 5bff3ab86b
4 changed files with 46 additions and 28 deletions

View File

@@ -95,7 +95,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
public ProjectAccessInfo apply(Project.NameKey nameKey)
throws ResourceNotFoundException, ResourceConflictException, IOException {
try {
return this.apply(new ProjectResource(projectControlFactory.controlFor(nameKey, self.get())));
return apply(new ProjectResource(projectControlFactory.controlFor(nameKey, self.get())));
} catch (NoSuchProjectException e) {
throw new ResourceNotFoundException(nameKey.get());
}
@@ -111,7 +111,7 @@ public class GetAccess implements RestReadView<ProjectResource> {
Project.NameKey projectName = rsrc.getNameKey();
ProjectAccessInfo info = new ProjectAccessInfo();
ProjectConfig config;
ProjectControl pc = open(projectName);
ProjectControl pc = createProjectControl(projectName);
RefControl metaConfigControl = pc.controlForRef(RefNames.REFS_CONFIG);
try (MetaDataUpdate md = metaDataUpdateFactory.create(projectName)) {
config = ProjectConfig.read(md);
@@ -120,11 +120,11 @@ public class GetAccess implements RestReadView<ProjectResource> {
md.setMessage("Update group names\n");
config.commit(md);
projectCache.evict(config.getProject());
pc = open(projectName);
pc = createProjectControl(projectName);
} else if (config.getRevision() != null
&& !config.getRevision().equals(pc.getProjectState().getConfig().getRevision())) {
projectCache.evict(config.getProject());
pc = open(projectName);
pc = createProjectControl(projectName);
}
} catch (ConfigInvalidException e) {
throw new ResourceConflictException(e.getMessage());
@@ -252,11 +252,10 @@ public class GetAccess implements RestReadView<ProjectResource> {
return accessSectionInfo;
}
private ProjectControl open(Project.NameKey projectName)
throws ResourceNotFoundException, IOException {
private ProjectControl createProjectControl(Project.NameKey projectName)
throws IOException, ResourceNotFoundException {
try {
return projectControlFactory.validateFor(
projectName, ProjectControl.OWNER | ProjectControl.VISIBLE, self.get());
return projectControlFactory.controlFor(projectName, self.get());
} catch (NoSuchProjectException e) {
throw new ResourceNotFoundException(projectName.get());
}