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