Merge "ProjectState: Remove controlFor(CurrentUser)"
This commit is contained in:
		@@ -45,10 +45,13 @@ public class DefaultPermissionBackend extends PermissionBackend {
 | 
			
		||||
  private static final CurrentUser.PropertyKey<Boolean> IS_ADMIN = CurrentUser.PropertyKey.create();
 | 
			
		||||
 | 
			
		||||
  private final ProjectCache projectCache;
 | 
			
		||||
  private final ProjectControl.Factory projectControlFactory;
 | 
			
		||||
 | 
			
		||||
  @Inject
 | 
			
		||||
  DefaultPermissionBackend(ProjectCache projectCache) {
 | 
			
		||||
  DefaultPermissionBackend(
 | 
			
		||||
      ProjectCache projectCache, ProjectControl.Factory projectControlFactory) {
 | 
			
		||||
    this.projectCache = projectCache;
 | 
			
		||||
    this.projectControlFactory = projectControlFactory;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private CapabilityCollection capabilities() {
 | 
			
		||||
@@ -73,7 +76,7 @@ public class DefaultPermissionBackend extends PermissionBackend {
 | 
			
		||||
      try {
 | 
			
		||||
        ProjectState state = projectCache.checkedGet(project);
 | 
			
		||||
        if (state != null) {
 | 
			
		||||
          return state.controlFor(user).asForProject().database(db);
 | 
			
		||||
          return projectControlFactory.create(user, state).asForProject().database(db);
 | 
			
		||||
        }
 | 
			
		||||
        return FailedPermissionBackend.project("not found", new NoSuchProjectException(project));
 | 
			
		||||
      } catch (IOException e) {
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ class ProjectControl {
 | 
			
		||||
 | 
			
		||||
  private final Set<AccountGroup.UUID> uploadGroups;
 | 
			
		||||
  private final Set<AccountGroup.UUID> receiveGroups;
 | 
			
		||||
  private final PermissionBackend.WithUser perm;
 | 
			
		||||
  private final PermissionBackend permissionBackend;
 | 
			
		||||
  private final CurrentUser user;
 | 
			
		||||
  private final ProjectState state;
 | 
			
		||||
  private final ChangeControl.Factory changeControlFactory;
 | 
			
		||||
@@ -102,13 +102,21 @@ class ProjectControl {
 | 
			
		||||
    this.uploadGroups = uploadGroups;
 | 
			
		||||
    this.receiveGroups = receiveGroups;
 | 
			
		||||
    this.permissionFilter = permissionFilter;
 | 
			
		||||
    this.perm = permissionBackend.user(who);
 | 
			
		||||
    this.permissionBackend = permissionBackend;
 | 
			
		||||
    user = who;
 | 
			
		||||
    state = ps;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ProjectControl forUser(CurrentUser who) {
 | 
			
		||||
    ProjectControl r = state.controlFor(who);
 | 
			
		||||
    ProjectControl r =
 | 
			
		||||
        new ProjectControl(
 | 
			
		||||
            uploadGroups,
 | 
			
		||||
            receiveGroups,
 | 
			
		||||
            permissionFilter,
 | 
			
		||||
            changeControlFactory,
 | 
			
		||||
            permissionBackend,
 | 
			
		||||
            who,
 | 
			
		||||
            state);
 | 
			
		||||
    // Not per-user, and reusing saves lookup time.
 | 
			
		||||
    r.allSections = allSections;
 | 
			
		||||
    return r;
 | 
			
		||||
@@ -173,7 +181,7 @@ class ProjectControl {
 | 
			
		||||
 | 
			
		||||
  boolean isAdmin() {
 | 
			
		||||
    try {
 | 
			
		||||
      perm.check(GlobalPermission.ADMINISTRATE_SERVER);
 | 
			
		||||
      permissionBackend.user(user).check(GlobalPermission.ADMINISTRATE_SERVER);
 | 
			
		||||
      return true;
 | 
			
		||||
    } catch (AuthException | PermissionBackendException e) {
 | 
			
		||||
      return false;
 | 
			
		||||
 
 | 
			
		||||
@@ -87,7 +87,6 @@ public class ProjectState {
 | 
			
		||||
  private final SitePaths sitePaths;
 | 
			
		||||
  private final AllProjectsName allProjectsName;
 | 
			
		||||
  private final ProjectCache projectCache;
 | 
			
		||||
  private final ProjectControl.Factory projectControlFactory;
 | 
			
		||||
  private final PrologEnvironment.Factory envFactory;
 | 
			
		||||
  private final GitRepositoryManager gitMgr;
 | 
			
		||||
  private final RulesCache rulesCache;
 | 
			
		||||
@@ -121,7 +120,6 @@ public class ProjectState {
 | 
			
		||||
      final ProjectCache projectCache,
 | 
			
		||||
      final AllProjectsName allProjectsName,
 | 
			
		||||
      final AllUsersName allUsersName,
 | 
			
		||||
      final ProjectControl.Factory projectControlFactory,
 | 
			
		||||
      final PrologEnvironment.Factory envFactory,
 | 
			
		||||
      final GitRepositoryManager gitMgr,
 | 
			
		||||
      final RulesCache rulesCache,
 | 
			
		||||
@@ -133,7 +131,6 @@ public class ProjectState {
 | 
			
		||||
    this.isAllProjects = config.getProject().getNameKey().equals(allProjectsName);
 | 
			
		||||
    this.isAllUsers = config.getProject().getNameKey().equals(allUsersName);
 | 
			
		||||
    this.allProjectsName = allProjectsName;
 | 
			
		||||
    this.projectControlFactory = projectControlFactory;
 | 
			
		||||
    this.envFactory = envFactory;
 | 
			
		||||
    this.gitMgr = gitMgr;
 | 
			
		||||
    this.rulesCache = rulesCache;
 | 
			
		||||
@@ -355,10 +352,6 @@ public class ProjectState {
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public ProjectControl controlFor(CurrentUser user) {
 | 
			
		||||
    return projectControlFactory.create(user, this);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * @return an iterable that walks through this project and then the parents of this project.
 | 
			
		||||
   *     Starts from this project and progresses up the hierarchy to All-Projects.
 | 
			
		||||
 
 | 
			
		||||
@@ -208,7 +208,6 @@ public class RefControlTest {
 | 
			
		||||
  @Inject private SingleVersionListener singleVersionListener;
 | 
			
		||||
  @Inject private InMemoryDatabase schemaFactory;
 | 
			
		||||
  @Inject private ThreadLocalRequestContext requestContext;
 | 
			
		||||
  @Inject private ProjectControl.Factory projectControlFactory;
 | 
			
		||||
 | 
			
		||||
  @Before
 | 
			
		||||
  public void setUp() throws Exception {
 | 
			
		||||
@@ -856,7 +855,6 @@ public class RefControlTest {
 | 
			
		||||
            projectCache,
 | 
			
		||||
            allProjectsName,
 | 
			
		||||
            allUsersName,
 | 
			
		||||
            projectControlFactory,
 | 
			
		||||
            envFactory,
 | 
			
		||||
            repoManager,
 | 
			
		||||
            rulesCache,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user