mirror of
https://github.com/theonedev/onedev.git
synced 2025-12-08 18:26:30 +00:00
Simplify model by removing individual permissions and role concept.
This commit is contained in:
parent
6cefe8fbef
commit
0f5ae8b81c
@ -16,8 +16,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.pmease.commons.git.Git;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
|
||||
@Singleton
|
||||
@SuppressWarnings("serial")
|
||||
@ -27,39 +27,39 @@ public class GitServlet extends HttpServlet {
|
||||
|
||||
private static final String INFO_REFS = "info/refs";
|
||||
|
||||
private final RepositoryManager repositoryManager;
|
||||
private final ProjectManager projectManager;
|
||||
|
||||
@Inject
|
||||
public GitServlet(RepositoryManager repositoryManager) {
|
||||
this.repositoryManager = repositoryManager;
|
||||
public GitServlet(ProjectManager projectManager) {
|
||||
this.projectManager = projectManager;
|
||||
}
|
||||
|
||||
private Repository getRepository(HttpServletRequest request, HttpServletResponse response, String repoInfo)
|
||||
private Project getProject(HttpServletRequest request, HttpServletResponse response, String repoInfo)
|
||||
throws IOException {
|
||||
|
||||
repoInfo = StringUtils.stripStart(StringUtils.stripEnd(repoInfo, "/"), "/");
|
||||
|
||||
String ownerName = StringUtils.substringBefore(repoInfo, "/");
|
||||
String repositoryName = StringUtils.substringAfter(repoInfo, "/");
|
||||
String projectName = StringUtils.substringAfter(repoInfo, "/");
|
||||
|
||||
if (StringUtils.isBlank(ownerName) || StringUtils.isBlank(repositoryName)) {
|
||||
if (StringUtils.isBlank(ownerName) || StringUtils.isBlank(projectName)) {
|
||||
String url = request.getRequestURL().toString();
|
||||
String urlRoot = url.substring(0, url.length()-request.getPathInfo().length());
|
||||
String message = "Expecting url of format " + urlRoot + "/<owner name>/<repository name>";
|
||||
String message = "Expecting url of format " + urlRoot + "/<owner name>/<project name>";
|
||||
logger.error("Error serving git request: " + message);
|
||||
response.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
|
||||
return null;
|
||||
}
|
||||
|
||||
Repository repository = repositoryManager.find(ownerName, repositoryName);
|
||||
if (repository == null) {
|
||||
String message = "Unable to find repository '" + repositoryName + "' owned by '" + ownerName + "'.";
|
||||
Project project = projectManager.find(ownerName, projectName);
|
||||
if (project == null) {
|
||||
String message = "Unable to find project '" + projectName + "' owned by '" + ownerName + "'.";
|
||||
logger.error("Error serving git request: " + message);
|
||||
response.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
|
||||
return null;
|
||||
}
|
||||
|
||||
return repository;
|
||||
return project;
|
||||
}
|
||||
|
||||
private void doNotCache(HttpServletResponse response) {
|
||||
@ -74,13 +74,13 @@ public class GitServlet extends HttpServlet {
|
||||
String service = StringUtils.substringAfterLast(pathInfo, "/");
|
||||
|
||||
String repoInfo = StringUtils.substringBeforeLast(pathInfo, "/");
|
||||
Repository repository = getRepository(req, resp, repoInfo);
|
||||
Project project = getProject(req, resp, repoInfo);
|
||||
|
||||
if (repository != null) {
|
||||
if (project != null) {
|
||||
doNotCache(resp);
|
||||
resp.setHeader("Content-Type", "application/x-" + service + "-result");
|
||||
|
||||
Git git = new Git(repositoryManager.locateStorage(repository).ofCode());
|
||||
Git git = new Git(projectManager.locateStorage(project).ofCode());
|
||||
|
||||
try {
|
||||
if (service.contains("upload")) {
|
||||
@ -111,8 +111,8 @@ public class GitServlet extends HttpServlet {
|
||||
}
|
||||
|
||||
String repoInfo = pathInfo.substring(0, pathInfo.length() - INFO_REFS.length());
|
||||
Repository repository = getRepository(req, resp, repoInfo);
|
||||
if (repository != null) {
|
||||
Project project = getProject(req, resp, repoInfo);
|
||||
if (project != null) {
|
||||
doNotCache(resp);
|
||||
String service = req.getParameter("service");
|
||||
resp.setHeader("Content-Type", "application/x-" + service + "-advertisement");
|
||||
@ -122,7 +122,7 @@ public class GitServlet extends HttpServlet {
|
||||
pack.writeString("# service=" + service + "\n");
|
||||
pack.end();
|
||||
|
||||
Git git = new Git(repositoryManager.locateStorage(repository).ofCode());
|
||||
Git git = new Git(projectManager.locateStorage(project).ofCode());
|
||||
|
||||
try {
|
||||
if (service.contains("upload")) {
|
||||
|
||||
@ -5,7 +5,7 @@ import java.util.Collection;
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Editable
|
||||
@ -13,7 +13,7 @@ public class ApprovedByAuthorizedUsers extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
Collection<User> authorizedUsers = request.getDestination().getRepository().findAuthorizedUsers(RepositoryOperation.WRITE);
|
||||
Collection<User> authorizedUsers = request.getDestination().getProject().findAuthorizedUsers(GeneralOperation.WRITE);
|
||||
OrGateKeeper or = new OrGateKeeper();
|
||||
for (User user: authorizedUsers) {
|
||||
ApprovedBySpecifiedUser entry = new ApprovedBySpecifiedUser();
|
||||
|
||||
@ -0,0 +1,29 @@
|
||||
package com.pmease.gitop.core.gatekeeper;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.model.Vote;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Editable
|
||||
public class ApprovedByProjectOwner extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
User projectOwner = request.getDestination().getProject().getOwner();
|
||||
|
||||
Vote.Result result = projectOwner.checkVoteSince(request.getBaseUpdate());
|
||||
|
||||
if (result == null) {
|
||||
request.inviteToVote(Sets.newHashSet(projectOwner), 1);
|
||||
return pending("To be approved by user '" + projectOwner.getName() + "'.");
|
||||
} else if (result.isAccept()) {
|
||||
return accept("Approved by user '" + projectOwner.getName() + "'.");
|
||||
} else {
|
||||
return reject("Rejected by user '" + projectOwner.getName() + "'.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
package com.pmease.gitop.core.gatekeeper;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.model.Vote;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Editable
|
||||
public class ApprovedByRepositoryOwner extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
User repositoryOwner = request.getDestination().getRepository().getOwner();
|
||||
|
||||
Vote.Result result = repositoryOwner.checkVoteSince(request.getBaseUpdate());
|
||||
|
||||
if (result == null) {
|
||||
request.inviteToVote(Sets.newHashSet(repositoryOwner), 1);
|
||||
return pending("To be approved by user '" + repositoryOwner.getName() + "'.");
|
||||
} else if (result.isAccept()) {
|
||||
return accept("Approved by user '" + repositoryOwner.getName() + "'.");
|
||||
} else {
|
||||
return reject("Rejected by user '" + repositoryOwner.getName() + "'.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -7,7 +7,7 @@ import javax.validation.constraints.Min;
|
||||
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.TeamMembership;
|
||||
import com.pmease.gitop.core.model.Membership;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.model.Vote;
|
||||
|
||||
@ -30,7 +30,7 @@ public class ApprovedBySpecifiedTeam extends TeamAwareGateKeeper {
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
Collection<User> members = new HashSet<User>();
|
||||
for (TeamMembership membership: getTeam().getMemberships())
|
||||
for (Membership membership: getTeam().getMemberships())
|
||||
members.add(membership.getUser());
|
||||
|
||||
int approvals = 0;
|
||||
|
||||
@ -7,7 +7,7 @@ import javax.validation.constraints.Min;
|
||||
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.TeamMembership;
|
||||
import com.pmease.gitop.core.model.Membership;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.model.Vote;
|
||||
|
||||
@ -40,7 +40,7 @@ public class GetMinScoreFromSpecifiedTeam extends TeamAwareGateKeeper {
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
Collection<User> members = new HashSet<User>();
|
||||
for (TeamMembership membership: getTeam().getMemberships())
|
||||
for (Membership membership: getTeam().getMemberships())
|
||||
members.add(membership.getUser());
|
||||
|
||||
int score = 0;
|
||||
|
||||
@ -2,7 +2,7 @@ package com.pmease.gitop.core.gatekeeper;
|
||||
|
||||
import com.pmease.commons.editable.annotation.Editable;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.TeamMembership;
|
||||
import com.pmease.gitop.core.model.Membership;
|
||||
import com.pmease.gitop.core.model.Vote;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@ -12,7 +12,7 @@ public class NoRejectionBySpecifiedTeam extends TeamAwareGateKeeper {
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
|
||||
for (TeamMembership membership: getTeam().getMemberships()) {
|
||||
for (Membership membership: getTeam().getMemberships()) {
|
||||
Vote.Result result = membership.getUser().checkVoteSince(request.getBaseUpdate());
|
||||
if (result.isReject()) {
|
||||
return reject("Rejected by user '" + membership.getUser().getName() + "'.");
|
||||
|
||||
@ -12,7 +12,7 @@ import com.pmease.commons.util.pattern.PatternSetMatcher;
|
||||
import com.pmease.commons.util.pattern.WildcardPathMatcher;
|
||||
import com.pmease.gitop.core.manager.BranchManager;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Editable
|
||||
@ -32,9 +32,9 @@ public class SubmittedToSpecifiedBranch extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
Repository repository = request.getDestination().getRepository();
|
||||
Project project = request.getDestination().getProject();
|
||||
BranchManager branchManager = AppLoader.getInstance(BranchManager.class);
|
||||
EntityLoader entityLoader = branchManager.asEntityLoader(repository);
|
||||
EntityLoader entityLoader = branchManager.asEntityLoader(project);
|
||||
EntityMatcher entityMatcher = new EntityMatcher(entityLoader, new WildcardPathMatcher());
|
||||
PatternSetMatcher patternSetMatcher = new PatternSetMatcher(entityMatcher);
|
||||
|
||||
@ -48,13 +48,13 @@ public class SubmittedToSpecifiedBranch extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public Object trim(Object context) {
|
||||
Preconditions.checkArgument(context instanceof Repository);
|
||||
Preconditions.checkArgument(context instanceof Project);
|
||||
|
||||
Repository repository = (Repository) context;
|
||||
Project project = (Project) context;
|
||||
BranchManager branchManager = AppLoader.getInstance(BranchManager.class);
|
||||
EntityLoader entityLoader = branchManager.asEntityLoader(repository);
|
||||
EntityLoader entityLoader = branchManager.asEntityLoader(project);
|
||||
EntityPatternSet patternSet = EntityPatternSet.fromStored(getBranchPatterns(), entityLoader);
|
||||
patternSet.trim(repository);
|
||||
patternSet.trim(project);
|
||||
|
||||
if (patternSet.getStored().isEmpty()) {
|
||||
return null;
|
||||
|
||||
@ -10,7 +10,7 @@ import com.pmease.commons.git.FindChangedFilesCommand;
|
||||
import com.pmease.commons.git.Git;
|
||||
import com.pmease.commons.loader.AppLoader;
|
||||
import com.pmease.commons.util.pattern.WildcardUtils;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.model.MergeRequest;
|
||||
import com.pmease.gitop.core.model.MergeRequestUpdate;
|
||||
|
||||
@ -32,8 +32,8 @@ public class TouchSpecifiedFiles extends AbstractGateKeeper {
|
||||
|
||||
@Override
|
||||
public CheckResult check(MergeRequest request) {
|
||||
RepositoryManager repositoryManager = AppLoader.getInstance(RepositoryManager.class);
|
||||
File repoDir = repositoryManager.locateStorage(request.getDestination().getRepository()).ofCode();
|
||||
ProjectManager projectManager = AppLoader.getInstance(ProjectManager.class);
|
||||
File repoDir = projectManager.locateStorage(request.getDestination().getProject()).ofCode();
|
||||
|
||||
FindChangedFilesCommand command = new Git(repoDir).findChangedFiles();
|
||||
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultAuthorizationManager;
|
||||
import com.pmease.gitop.core.model.Authorization;
|
||||
|
||||
@ImplementedBy(DefaultAuthorizationManager.class)
|
||||
public interface AuthorizationManager extends GenericDao<Authorization> {
|
||||
|
||||
}
|
||||
@ -5,13 +5,13 @@ import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.commons.util.namedentity.EntityLoader;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultBranchManager;
|
||||
import com.pmease.gitop.core.model.Branch;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
|
||||
@ImplementedBy(DefaultBranchManager.class)
|
||||
public interface BranchManager extends GenericDao<Branch> {
|
||||
|
||||
public Branch find(Repository repository, String branchName);
|
||||
public Branch find(Project project, String branchName);
|
||||
|
||||
public EntityLoader asEntityLoader(Repository repository);
|
||||
public EntityLoader asEntityLoader(Project project);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultProjectManager;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
import com.pmease.gitop.core.storage.ProjectStorage;
|
||||
|
||||
@ImplementedBy(DefaultProjectManager.class)
|
||||
public interface ProjectManager extends GenericDao<Project> {
|
||||
|
||||
ProjectStorage locateStorage(Project project);
|
||||
|
||||
Project find(String ownerName, String projectName);
|
||||
|
||||
Collection<Project> findPublic();
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultRepositoryAuthorizationByTeamManager;
|
||||
import com.pmease.gitop.core.model.RepositoryAuthorizationByIndividual;
|
||||
|
||||
@ImplementedBy(DefaultRepositoryAuthorizationByTeamManager.class)
|
||||
public interface RepositoryAuthorizationByIndividualManager extends GenericDao<RepositoryAuthorizationByIndividual> {
|
||||
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultRepositoryAuthorizationByTeamManager;
|
||||
import com.pmease.gitop.core.model.RepositoryAuthorizationByTeam;
|
||||
|
||||
@ImplementedBy(DefaultRepositoryAuthorizationByTeamManager.class)
|
||||
public interface RepositoryAuthorizationByTeamManager extends GenericDao<RepositoryAuthorizationByTeam> {
|
||||
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultRepositoryManager;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.storage.RepositoryStorage;
|
||||
|
||||
@ImplementedBy(DefaultRepositoryManager.class)
|
||||
public interface RepositoryManager extends GenericDao<Repository> {
|
||||
|
||||
RepositoryStorage locateStorage(Repository repository);
|
||||
|
||||
Repository find(String ownerName, String repositoryName);
|
||||
|
||||
Collection<Repository> findPublic();
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultRoleManager;
|
||||
import com.pmease.gitop.core.model.Role;
|
||||
|
||||
@ImplementedBy(DefaultRoleManager.class)
|
||||
public interface RoleManager extends GenericDao<Role> {
|
||||
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
package com.pmease.gitop.core.manager;
|
||||
|
||||
import com.google.inject.ImplementedBy;
|
||||
import com.pmease.commons.hibernate.dao.GenericDao;
|
||||
import com.pmease.gitop.core.manager.impl.DefaultRepositoryAuthorizationByTeamManager;
|
||||
import com.pmease.gitop.core.model.UserAuthorizationByIndividual;
|
||||
|
||||
@ImplementedBy(DefaultRepositoryAuthorizationByTeamManager.class)
|
||||
public interface UserAuthorizationByIndividualManager extends GenericDao<UserAuthorizationByIndividual> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.pmease.gitop.core.manager.impl;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.AuthorizationManager;
|
||||
import com.pmease.gitop.core.model.Authorization;
|
||||
|
||||
@Singleton
|
||||
public class DefaultAuthorizationManager extends AbstractGenericDao<Authorization>
|
||||
implements AuthorizationManager {
|
||||
|
||||
@Inject
|
||||
public DefaultAuthorizationManager(GeneralDao generalDao) {
|
||||
super(generalDao);
|
||||
}
|
||||
|
||||
}
|
||||
@ -13,7 +13,7 @@ import com.pmease.commons.util.namedentity.EntityLoader;
|
||||
import com.pmease.commons.util.namedentity.NamedEntity;
|
||||
import com.pmease.gitop.core.manager.BranchManager;
|
||||
import com.pmease.gitop.core.model.Branch;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
|
||||
@Singleton
|
||||
public class DefaultBranchManager extends AbstractGenericDao<Branch> implements BranchManager {
|
||||
@ -26,12 +26,12 @@ public class DefaultBranchManager extends AbstractGenericDao<Branch> implements
|
||||
|
||||
@Sessional
|
||||
@Override
|
||||
public Branch find(Repository repository, String name) {
|
||||
return find(new Criterion[]{Restrictions.eq("repository", repository), Restrictions.eq("name", name)});
|
||||
public Branch find(Project project, String name) {
|
||||
return find(new Criterion[]{Restrictions.eq("project", project), Restrictions.eq("name", name)});
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityLoader asEntityLoader(final Repository repository) {
|
||||
public EntityLoader asEntityLoader(final Project project) {
|
||||
return new EntityLoader() {
|
||||
|
||||
@Override
|
||||
@ -58,7 +58,7 @@ public class DefaultBranchManager extends AbstractGenericDao<Branch> implements
|
||||
|
||||
@Override
|
||||
public NamedEntity get(String name) {
|
||||
final Branch branch = find(repository, name);
|
||||
final Branch branch = find(project, name);
|
||||
if (branch != null) {
|
||||
return new NamedEntity() {
|
||||
|
||||
|
||||
@ -15,17 +15,17 @@ import com.pmease.commons.hibernate.Transactional;
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.ConfigManager;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.storage.RepositoryStorage;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
import com.pmease.gitop.core.storage.ProjectStorage;
|
||||
|
||||
@Singleton
|
||||
public class DefaultRepositoryManager extends AbstractGenericDao<Repository> implements RepositoryManager {
|
||||
public class DefaultProjectManager extends AbstractGenericDao<Project> implements ProjectManager {
|
||||
|
||||
private ConfigManager configManager;
|
||||
|
||||
@Inject
|
||||
public DefaultRepositoryManager(GeneralDao generalDao, ConfigManager configManager) {
|
||||
public DefaultProjectManager(GeneralDao generalDao, ConfigManager configManager) {
|
||||
super(generalDao);
|
||||
|
||||
this.configManager = configManager;
|
||||
@ -33,11 +33,11 @@ public class DefaultRepositoryManager extends AbstractGenericDao<Repository> imp
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void save(Repository entity) {
|
||||
public void save(Project entity) {
|
||||
if (entity.isNew()) {
|
||||
super.save(entity);
|
||||
|
||||
RepositoryStorage storage = locateStorage(entity);
|
||||
ProjectStorage storage = locateStorage(entity);
|
||||
storage.clean();
|
||||
|
||||
new Git(storage.ofCode()).init().bare(true).call();
|
||||
@ -48,31 +48,31 @@ public class DefaultRepositoryManager extends AbstractGenericDao<Repository> imp
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void delete(Repository entity) {
|
||||
public void delete(Project entity) {
|
||||
super.delete(entity);
|
||||
|
||||
locateStorage(entity).delete();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RepositoryStorage locateStorage(Repository repository) {
|
||||
return new RepositoryStorage(new File(configManager.getStorageSetting().getRepoStorageDir(), repository.getId().toString()));
|
||||
public ProjectStorage locateStorage(Project project) {
|
||||
return new ProjectStorage(new File(configManager.getStorageSetting().getStorageDir(), project.getId().toString()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Repository> findPublic() {
|
||||
public Collection<Project> findPublic() {
|
||||
return query(new Criterion[]{Restrictions.eq("publiclyAccessible", true)});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Repository find(String ownerName, String repositoryName) {
|
||||
public Project find(String ownerName, String projectName) {
|
||||
Criteria criteria = createCriteria();
|
||||
criteria.add(Restrictions.eq("name", repositoryName));
|
||||
criteria.add(Restrictions.eq("name", projectName));
|
||||
criteria.createAlias("owner", "owner");
|
||||
criteria.add(Restrictions.eq("owner.name", ownerName));
|
||||
|
||||
criteria.setMaxResults(1);
|
||||
return (Repository) criteria.uniqueResult();
|
||||
return (Project) criteria.uniqueResult();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package com.pmease.gitop.core.manager.impl;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.RepositoryAuthorizationByIndividualManager;
|
||||
import com.pmease.gitop.core.model.RepositoryAuthorizationByIndividual;
|
||||
|
||||
@Singleton
|
||||
public class DefaultRepositoryAuthorizationByIndividualManager
|
||||
extends AbstractGenericDao<RepositoryAuthorizationByIndividual>
|
||||
implements RepositoryAuthorizationByIndividualManager {
|
||||
|
||||
@Inject
|
||||
public DefaultRepositoryAuthorizationByIndividualManager(GeneralDao generalDao) {
|
||||
super(generalDao);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
package com.pmease.gitop.core.manager.impl;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.RepositoryAuthorizationByTeamManager;
|
||||
import com.pmease.gitop.core.model.RepositoryAuthorizationByTeam;
|
||||
|
||||
@Singleton
|
||||
public class DefaultRepositoryAuthorizationByTeamManager extends AbstractGenericDao<RepositoryAuthorizationByTeam>
|
||||
implements RepositoryAuthorizationByTeamManager {
|
||||
|
||||
@Inject
|
||||
public DefaultRepositoryAuthorizationByTeamManager(GeneralDao generalDao) {
|
||||
super(generalDao);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
package com.pmease.gitop.core.manager.impl;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Provider;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.Session;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.RoleManager;
|
||||
import com.pmease.gitop.core.model.Role;
|
||||
|
||||
@Singleton
|
||||
public class DefaultRoleManager extends AbstractGenericDao<Role> implements RoleManager {
|
||||
|
||||
@Inject
|
||||
public DefaultRoleManager(GeneralDao generalDao, Provider<Session> sessionProvider) {
|
||||
super(generalDao);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package com.pmease.gitop.core.manager.impl;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import com.pmease.commons.hibernate.dao.AbstractGenericDao;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.gitop.core.manager.UserAuthorizationByIndividualManager;
|
||||
import com.pmease.gitop.core.model.UserAuthorizationByIndividual;
|
||||
|
||||
@Singleton
|
||||
public class DefaultUserAuthorizationByIndividualManager
|
||||
extends AbstractGenericDao<UserAuthorizationByIndividual>
|
||||
implements UserAuthorizationByIndividualManager {
|
||||
|
||||
@Inject
|
||||
public DefaultUserAuthorizationByIndividualManager(GeneralDao generalDao) {
|
||||
super(generalDao);
|
||||
}
|
||||
|
||||
}
|
||||
@ -7,14 +7,14 @@ import javax.persistence.Table;
|
||||
import javax.persistence.UniqueConstraint;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"team", "repository"})
|
||||
@UniqueConstraint(columnNames={"team", "project"})
|
||||
})
|
||||
public class RepositoryAuthorizationByTeam extends AbstractEntity {
|
||||
public class Authorization extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
@ -22,15 +22,15 @@ public class RepositoryAuthorizationByTeam extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private Repository repository;
|
||||
private Project project;
|
||||
|
||||
private RepositoryOperation authorizedOperation = RepositoryOperation.READ;
|
||||
private GeneralOperation authorizedOperation = GeneralOperation.READ;
|
||||
|
||||
public RepositoryOperation getAuthorizedOperation() {
|
||||
public GeneralOperation getAuthorizedOperation() {
|
||||
return authorizedOperation;
|
||||
}
|
||||
|
||||
public void setAuthorizedOperation(RepositoryOperation authorizedOperation) {
|
||||
public void setAuthorizedOperation(GeneralOperation authorizedOperation) {
|
||||
this.authorizedOperation = authorizedOperation;
|
||||
}
|
||||
|
||||
@ -42,12 +42,12 @@ public class RepositoryAuthorizationByTeam extends AbstractEntity {
|
||||
this.team = team;
|
||||
}
|
||||
|
||||
public Repository getRepository() {
|
||||
return repository;
|
||||
public Project getProject() {
|
||||
return project;
|
||||
}
|
||||
|
||||
public void setRepository(Repository repository) {
|
||||
this.repository = repository;
|
||||
public void setProject(Project project) {
|
||||
this.project = project;
|
||||
}
|
||||
|
||||
}
|
||||
@ -12,23 +12,23 @@ import com.pmease.commons.hibernate.AbstractEntity;
|
||||
@SuppressWarnings("serial")
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"repository", "name"})
|
||||
@UniqueConstraint(columnNames={"project", "name"})
|
||||
})
|
||||
public class Branch extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private Repository repository;
|
||||
private Project project;
|
||||
|
||||
@Column(nullable=false)
|
||||
private String name;
|
||||
|
||||
public Repository getRepository() {
|
||||
return repository;
|
||||
public Project getProject() {
|
||||
return project;
|
||||
}
|
||||
|
||||
public void setRepository(Repository repository) {
|
||||
this.repository = repository;
|
||||
public void setProject(Project project) {
|
||||
this.project = project;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
|
||||
@ -13,7 +13,7 @@ import com.pmease.commons.hibernate.AbstractEntity;
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"user", "team"})
|
||||
})
|
||||
public class TeamMembership extends AbstractEntity {
|
||||
public class Membership extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
@ -26,7 +26,7 @@ import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.Gitop;
|
||||
import com.pmease.gitop.core.gatekeeper.CheckResult;
|
||||
import com.pmease.gitop.core.gatekeeper.GateKeeper;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.manager.VoteInvitationManager;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@ -172,7 +172,7 @@ public class MergeRequest extends AbstractEntity {
|
||||
if (effectiveUpdates == null) {
|
||||
effectiveUpdates = new ArrayList<MergeRequestUpdate>();
|
||||
|
||||
File repoDir = Gitop.getInstance(RepositoryManager.class).locateStorage(getDestination().getRepository()).ofCode();
|
||||
File repoDir = Gitop.getInstance(ProjectManager.class).locateStorage(getDestination().getProject()).ofCode();
|
||||
Git git = new Git(repoDir);
|
||||
CheckAncestorCommand command = git.checkAncestor();
|
||||
command.ancestor(getMergeBase());
|
||||
@ -195,7 +195,7 @@ public class MergeRequest extends AbstractEntity {
|
||||
}
|
||||
|
||||
public boolean isFastForward() {
|
||||
File repoDir = Gitop.getInstance(RepositoryManager.class).locateStorage(getDestination().getRepository()).ofCode();
|
||||
File repoDir = Gitop.getInstance(ProjectManager.class).locateStorage(getDestination().getProject()).ofCode();
|
||||
CheckAncestorCommand command = new Git(repoDir).checkAncestor();
|
||||
command.ancestor(getDestination().getName());
|
||||
command.descendant(getLatestUpdate().getRefName());
|
||||
@ -203,8 +203,8 @@ public class MergeRequest extends AbstractEntity {
|
||||
}
|
||||
|
||||
public Collection<String> findTouchedFiles() {
|
||||
RepositoryManager repositoryManager = Gitop.getInstance(RepositoryManager.class);
|
||||
File repoDir = repositoryManager.locateStorage(getDestination().getRepository()).ofCode();
|
||||
ProjectManager projectManager = Gitop.getInstance(ProjectManager.class);
|
||||
File repoDir = projectManager.locateStorage(getDestination().getProject()).ofCode();
|
||||
MergeRequestUpdate update = getLatestUpdate();
|
||||
if (update != null) {
|
||||
FindChangedFilesCommand command = new Git(repoDir).findChangedFiles();
|
||||
@ -218,8 +218,8 @@ public class MergeRequest extends AbstractEntity {
|
||||
|
||||
public boolean isMerged() {
|
||||
if (merged == null) {
|
||||
RepositoryManager repositoryManager = Gitop.getInstance(RepositoryManager.class);
|
||||
File repoDir = repositoryManager.locateStorage(getDestination().getRepository()).ofCode();
|
||||
ProjectManager projectManager = Gitop.getInstance(ProjectManager.class);
|
||||
File repoDir = projectManager.locateStorage(getDestination().getProject()).ofCode();
|
||||
CheckAncestorCommand command = new Git(repoDir).checkAncestor();
|
||||
command.ancestor(getLatestUpdate().getRefName());
|
||||
command.descendant(getDestination().getName());
|
||||
@ -230,8 +230,8 @@ public class MergeRequest extends AbstractEntity {
|
||||
|
||||
public String getMergeBase() {
|
||||
if (mergeBase == null) {
|
||||
RepositoryManager repositoryManager = Gitop.getInstance(RepositoryManager.class);
|
||||
File repoDir = repositoryManager.locateStorage(getDestination().getRepository()).ofCode();
|
||||
ProjectManager projectManager = Gitop.getInstance(ProjectManager.class);
|
||||
File repoDir = projectManager.locateStorage(getDestination().getProject()).ofCode();
|
||||
CalcMergeBaseCommand command = new Git(repoDir).calcMergeBase();
|
||||
command.rev1(getLatestUpdate().getRefName());
|
||||
command.rev2(getDestination().getName());
|
||||
@ -315,7 +315,7 @@ public class MergeRequest extends AbstractEntity {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check this request with gate keeper of target repository.
|
||||
* Check this request with gate keeper of target project.
|
||||
* <p>
|
||||
* @param force
|
||||
* whether or not to force the check. Since the check might be time-consuming, Gitop
|
||||
@ -326,7 +326,7 @@ public class MergeRequest extends AbstractEntity {
|
||||
*/
|
||||
public Optional<CheckResult> check(boolean force) {
|
||||
if (checkResult == null || force) {
|
||||
GateKeeper gateKeeper = getDestination().getRepository().getGateKeeper();
|
||||
GateKeeper gateKeeper = getDestination().getProject().getGateKeeper();
|
||||
if (gateKeeper != null) {
|
||||
checkResult = Optional.of(gateKeeper.check(this));
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ import com.pmease.gitop.core.manager.UserManager;
|
||||
import com.pmease.gitop.core.permission.ObjectPermission;
|
||||
import com.pmease.gitop.core.permission.object.ProtectedObject;
|
||||
import com.pmease.gitop.core.permission.object.UserBelonging;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@ -31,7 +31,7 @@ import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
})
|
||||
@SuppressWarnings("serial")
|
||||
@Editable
|
||||
public class Repository extends AbstractEntity implements UserBelonging {
|
||||
public class Project extends AbstractEntity implements UserBelonging {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
@ -44,17 +44,13 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
|
||||
private boolean publiclyAccessible;
|
||||
|
||||
private RepositoryOperation defaultAuthorizedOperation;
|
||||
@Column(nullable=false)
|
||||
private GeneralOperation defaultAuthorizedOperation = GeneralOperation.NO_ACCESS;
|
||||
|
||||
private GateKeeper gateKeeper;
|
||||
|
||||
@OneToMany(mappedBy="repository")
|
||||
private Collection<RepositoryAuthorizationByTeam> authorizationsByTeam =
|
||||
new ArrayList<RepositoryAuthorizationByTeam>();
|
||||
|
||||
@OneToMany(mappedBy="repository")
|
||||
private Collection<RepositoryAuthorizationByIndividual> authorizationsByIndividual =
|
||||
new ArrayList<RepositoryAuthorizationByIndividual>();
|
||||
@OneToMany(mappedBy="project")
|
||||
private Collection<Authorization> authorizations = new ArrayList<Authorization>();
|
||||
|
||||
public User getOwner() {
|
||||
return owner;
|
||||
@ -65,7 +61,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
}
|
||||
|
||||
@Editable(description=
|
||||
"Specify name of the repository. It will be used to identify the repository when accessing via Git.")
|
||||
"Specify name of the project. It will be used to identify the project when accessing via Git.")
|
||||
@NotEmpty
|
||||
public String getName() {
|
||||
return name;
|
||||
@ -75,7 +71,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Editable(description="Specify description of the repository.")
|
||||
@Editable(description="Specify description of the project.")
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
@ -85,7 +81,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
}
|
||||
|
||||
@Editable(name="Public", description=
|
||||
"If a repository is made public, it will be able to be browsed/pulled by anonymous users.")
|
||||
"If a project is made public, it will be able to be browsed/pulled by anonymous users.")
|
||||
public boolean isPubliclyAccessible() {
|
||||
return publiclyAccessible;
|
||||
}
|
||||
@ -94,12 +90,12 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
this.publiclyAccessible = publiclyAccessible;
|
||||
}
|
||||
|
||||
public RepositoryOperation getDefaultAuthorizedOperation() {
|
||||
public GeneralOperation getDefaultAuthorizedOperation() {
|
||||
return defaultAuthorizedOperation;
|
||||
}
|
||||
|
||||
public void setDefaultAuthorizedOperation(
|
||||
RepositoryOperation defaultAuthorizedOperation) {
|
||||
GeneralOperation defaultAuthorizedOperation) {
|
||||
this.defaultAuthorizedOperation = defaultAuthorizedOperation;
|
||||
}
|
||||
|
||||
@ -119,35 +115,25 @@ public class Repository extends AbstractEntity implements UserBelonging {
|
||||
return getOwner();
|
||||
}
|
||||
|
||||
public Collection<RepositoryAuthorizationByTeam> getAuthorizationsByTeam() {
|
||||
return authorizationsByTeam;
|
||||
public Collection<Authorization> getAuthorizations() {
|
||||
return authorizations;
|
||||
}
|
||||
|
||||
public void setAuthorizationsByTeam(
|
||||
Collection<RepositoryAuthorizationByTeam> authorizationsByTeam) {
|
||||
this.authorizationsByTeam = authorizationsByTeam;
|
||||
}
|
||||
|
||||
public Collection<RepositoryAuthorizationByIndividual> getAuthorizationsByIndividual() {
|
||||
return authorizationsByIndividual;
|
||||
}
|
||||
|
||||
public void setAuthorizationsByIndividual(
|
||||
Collection<RepositoryAuthorizationByIndividual> authorizationsByIndividual) {
|
||||
this.authorizationsByIndividual = authorizationsByIndividual;
|
||||
public void setAuthorizations(Collection<Authorization> authorizations) {
|
||||
this.authorizations = authorizations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(ProtectedObject object) {
|
||||
if (object instanceof Repository) {
|
||||
Repository repository = (Repository) object;
|
||||
return repository.getId().equals(getId());
|
||||
if (object instanceof Project) {
|
||||
Project project = (Project) object;
|
||||
return project.getId().equals(getId());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public Collection<User> findAuthorizedUsers(RepositoryOperation operation) {
|
||||
public Collection<User> findAuthorizedUsers(GeneralOperation operation) {
|
||||
Set<User> authorizedUsers = new HashSet<User>();
|
||||
for (User user: Gitop.getInstance(UserManager.class).query(null)) {
|
||||
if (user.asSubject().isPermitted(new ObjectPermission(this, operation)))
|
||||
@ -1,53 +0,0 @@
|
||||
package com.pmease.gitop.core.model;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.UniqueConstraint;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"individual", "repository"})
|
||||
})
|
||||
public class RepositoryAuthorizationByIndividual extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private User individual;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private Repository repository;
|
||||
|
||||
private RepositoryOperation authorizedOperation = RepositoryOperation.READ;
|
||||
|
||||
public RepositoryOperation getAuthorizedOperation() {
|
||||
return authorizedOperation;
|
||||
}
|
||||
|
||||
public void setAuthorizedOperation(RepositoryOperation authorizedOperation) {
|
||||
this.authorizedOperation = authorizedOperation;
|
||||
}
|
||||
|
||||
public User getIndividual() {
|
||||
return individual;
|
||||
}
|
||||
|
||||
public void setIndividual(User individual) {
|
||||
this.individual = individual;
|
||||
}
|
||||
|
||||
public Repository getRepository() {
|
||||
return repository;
|
||||
}
|
||||
|
||||
public void setRepository(Repository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,75 +0,0 @@
|
||||
package com.pmease.gitop.core.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import org.apache.shiro.authz.Permission;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.permission.ObjectPermission;
|
||||
import com.pmease.gitop.core.permission.operation.PrivilegedOperation;
|
||||
|
||||
@Entity
|
||||
@SuppressWarnings("serial")
|
||||
public class Role extends AbstractEntity implements Permission {
|
||||
|
||||
@Column(nullable=false, unique=true)
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
@Column(nullable=false)
|
||||
private ArrayList<PrivilegedOperation> operations = new ArrayList<PrivilegedOperation>();
|
||||
|
||||
@OneToMany(mappedBy="role")
|
||||
private Collection<RoleMembership> memberships = new ArrayList<RoleMembership>();
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public Collection<RoleMembership> getMemberships() {
|
||||
return memberships;
|
||||
}
|
||||
|
||||
public void setMemberships(Collection<RoleMembership> memberships) {
|
||||
this.memberships = memberships;
|
||||
}
|
||||
|
||||
public ArrayList<PrivilegedOperation> getOperations() {
|
||||
return operations;
|
||||
}
|
||||
|
||||
public void setOperations(ArrayList<PrivilegedOperation> operations) {
|
||||
this.operations = operations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean implies(Permission permission) {
|
||||
if (permission instanceof ObjectPermission) {
|
||||
ObjectPermission objectPermission = (ObjectPermission) permission;
|
||||
for (PrivilegedOperation each: getOperations()) {
|
||||
if (each.can(objectPermission.getOperation()))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package com.pmease.gitop.core.model;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.UniqueConstraint;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"user", "role"})
|
||||
})
|
||||
public class RoleMembership extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private User user;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private Role role;
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public Role getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
public void setRole(Role role) {
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
}
|
||||
@ -15,7 +15,7 @@ import org.apache.shiro.authz.Permission;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.permission.ObjectPermission;
|
||||
import com.pmease.gitop.core.permission.operation.UserOperation;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@ -33,18 +33,14 @@ public class Team extends AbstractEntity implements Permission {
|
||||
|
||||
private String description;
|
||||
|
||||
private boolean anonymous;
|
||||
|
||||
private boolean register;
|
||||
|
||||
@Column(nullable=false)
|
||||
private UserOperation authorizedOperation = UserOperation.READ;
|
||||
private GeneralOperation authorizedOperation = GeneralOperation.READ;
|
||||
|
||||
@OneToMany(mappedBy="team")
|
||||
private Collection<TeamMembership> memberships = new ArrayList<TeamMembership>();
|
||||
private Collection<Membership> memberships = new ArrayList<Membership>();
|
||||
|
||||
@OneToMany(mappedBy="team")
|
||||
private Collection<RepositoryAuthorizationByTeam> repositoryAuthorizations = new ArrayList<RepositoryAuthorizationByTeam>();
|
||||
private Collection<Authorization> authorizations = new ArrayList<Authorization>();
|
||||
|
||||
public User getOwner() {
|
||||
return owner;
|
||||
@ -70,44 +66,28 @@ public class Team extends AbstractEntity implements Permission {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public boolean isAnonymous() {
|
||||
return anonymous;
|
||||
}
|
||||
|
||||
public void setAnonymous(boolean anonymous) {
|
||||
this.anonymous = anonymous;
|
||||
}
|
||||
|
||||
public boolean isRegister() {
|
||||
return register;
|
||||
}
|
||||
|
||||
public void setRegister(boolean register) {
|
||||
this.register = register;
|
||||
}
|
||||
|
||||
public UserOperation getAuthorizedOperation() {
|
||||
public GeneralOperation getAuthorizedOperation() {
|
||||
return authorizedOperation;
|
||||
}
|
||||
|
||||
public void setAuthorizedOperation(UserOperation authorizedOeration) {
|
||||
public void setAuthorizedOperation(GeneralOperation authorizedOeration) {
|
||||
this.authorizedOperation = authorizedOeration;
|
||||
}
|
||||
|
||||
public Collection<TeamMembership> getMemberships() {
|
||||
public Collection<Membership> getMemberships() {
|
||||
return memberships;
|
||||
}
|
||||
|
||||
public void setMemberships(Collection<TeamMembership> memberships) {
|
||||
public void setMemberships(Collection<Membership> memberships) {
|
||||
this.memberships = memberships;
|
||||
}
|
||||
|
||||
public Collection<RepositoryAuthorizationByTeam> getRepositoryAuthorizations() {
|
||||
return repositoryAuthorizations;
|
||||
public Collection<Authorization> getAuthorizations() {
|
||||
return authorizations;
|
||||
}
|
||||
|
||||
public void setRepositoryAuthorizations(Collection<RepositoryAuthorizationByTeam> repositoryAuthorizations) {
|
||||
this.repositoryAuthorizations = repositoryAuthorizations;
|
||||
public void setAuthorizations(Collection<Authorization> authorizations) {
|
||||
this.authorizations = authorizations;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -118,10 +98,10 @@ public class Team extends AbstractEntity implements Permission {
|
||||
if (userPermission.implies(objectPermission))
|
||||
return true;
|
||||
|
||||
for (RepositoryAuthorizationByTeam authorization: getRepositoryAuthorizations()) {
|
||||
Permission repositoryPermission = new ObjectPermission(
|
||||
authorization.getRepository(), authorization.getAuthorizedOperation());
|
||||
if (repositoryPermission.implies(objectPermission))
|
||||
for (Authorization authorization: getAuthorizations()) {
|
||||
Permission projectPermission = new ObjectPermission(
|
||||
authorization.getProject(), authorization.getAuthorizedOperation());
|
||||
if (projectPermission.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,19 +16,19 @@ import com.pmease.commons.editable.annotation.Password;
|
||||
import com.pmease.commons.loader.AppLoader;
|
||||
import com.pmease.commons.shiro.AbstractUser;
|
||||
import com.pmease.gitop.core.Gitop;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.manager.UserManager;
|
||||
import com.pmease.gitop.core.permission.ObjectPermission;
|
||||
import com.pmease.gitop.core.permission.object.ProtectedObject;
|
||||
import com.pmease.gitop.core.permission.object.UserBelonging;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
|
||||
/**
|
||||
* This class represents either a project or an user in the system.
|
||||
* <p>
|
||||
* In Gitop, users and projects are the same thing.
|
||||
* If necessary, you can always treat an user account as a project account.
|
||||
* {@link Repository} and {@link Team} are always created under a specific account.
|
||||
* {@link Project} and {@link Team} are always created under a specific account.
|
||||
*
|
||||
* @author robin
|
||||
*
|
||||
@ -43,17 +43,16 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
|
||||
private String fullName;
|
||||
|
||||
@OneToMany(mappedBy="user")
|
||||
private Collection<TeamMembership> teamMemberships = new ArrayList<TeamMembership>();
|
||||
private boolean admin;
|
||||
|
||||
@OneToMany(mappedBy="user")
|
||||
private Collection<RoleMembership> roleMemberships = new ArrayList<RoleMembership>();
|
||||
private Collection<Membership> memberships = new ArrayList<Membership>();
|
||||
|
||||
@OneToMany(mappedBy="submitter")
|
||||
private Collection<MergeRequest> mergeRequests = new ArrayList<MergeRequest>();
|
||||
|
||||
@OneToMany(mappedBy="owner")
|
||||
private Collection<Repository> repositories = new ArrayList<Repository>();
|
||||
private Collection<Project> repositories = new ArrayList<Project>();
|
||||
|
||||
@OneToMany(mappedBy="owner")
|
||||
private Collection<Team> teams = new ArrayList<Team>();
|
||||
@ -64,18 +63,6 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
@OneToMany(mappedBy="voter")
|
||||
private Collection<VoteInvitation> voteVitations = new ArrayList<VoteInvitation>();
|
||||
|
||||
@OneToMany(mappedBy="individual")
|
||||
private Collection<RepositoryAuthorizationByIndividual> repositoryAuthorizations =
|
||||
new ArrayList<RepositoryAuthorizationByIndividual>();
|
||||
|
||||
@OneToMany(mappedBy="individual")
|
||||
private Collection<UserAuthorizationByIndividual> userAuthorizations =
|
||||
new ArrayList<UserAuthorizationByIndividual>();
|
||||
|
||||
@OneToMany(mappedBy="user")
|
||||
private Collection<UserAuthorizationByIndividual> authorizationsByIndividual =
|
||||
new ArrayList<UserAuthorizationByIndividual>();
|
||||
|
||||
@Editable(order=100)
|
||||
@NotEmpty
|
||||
@Override
|
||||
@ -111,27 +98,27 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
return super.getPasswordHash();
|
||||
}
|
||||
|
||||
public Collection<TeamMembership> getTeamMemberships() {
|
||||
return teamMemberships;
|
||||
public boolean isAdmin() {
|
||||
return admin;
|
||||
}
|
||||
|
||||
public void setTeamMemberships(Collection<TeamMembership> teamMemberships) {
|
||||
this.teamMemberships = teamMemberships;
|
||||
public void setAdmin(boolean admin) {
|
||||
this.admin = admin;
|
||||
}
|
||||
|
||||
public Collection<RoleMembership> getRoleMemberships() {
|
||||
return roleMemberships;
|
||||
public Collection<Membership> getMemberships() {
|
||||
return memberships;
|
||||
}
|
||||
|
||||
public void setRoleMemberships(Collection<RoleMembership> roleMemberships) {
|
||||
this.roleMemberships = roleMemberships;
|
||||
public void setMemberships(Collection<Membership> memberships) {
|
||||
this.memberships = memberships;
|
||||
}
|
||||
|
||||
public Collection<Repository> getRepositories() {
|
||||
public Collection<Project> getRepositories() {
|
||||
return repositories;
|
||||
}
|
||||
|
||||
public void setRepositories(Collection<Repository> repositories) {
|
||||
public void setRepositories(Collection<Project> repositories) {
|
||||
this.repositories = repositories;
|
||||
}
|
||||
|
||||
@ -175,33 +162,6 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
this.voteVitations = voteVitations;
|
||||
}
|
||||
|
||||
public Collection<RepositoryAuthorizationByIndividual> getRepositoryAuthorizations() {
|
||||
return repositoryAuthorizations;
|
||||
}
|
||||
|
||||
public void setRepositoryAuthorizations(
|
||||
Collection<RepositoryAuthorizationByIndividual> repositoryAuthorizations) {
|
||||
this.repositoryAuthorizations = repositoryAuthorizations;
|
||||
}
|
||||
|
||||
public Collection<UserAuthorizationByIndividual> getUserAuthorizations() {
|
||||
return userAuthorizations;
|
||||
}
|
||||
|
||||
public void setUserAuthorizations(
|
||||
Collection<UserAuthorizationByIndividual> userAuthorizations) {
|
||||
this.userAuthorizations = userAuthorizations;
|
||||
}
|
||||
|
||||
public Collection<UserAuthorizationByIndividual> getAuthorizationsByIndividual() {
|
||||
return authorizationsByIndividual;
|
||||
}
|
||||
|
||||
public void setAuthorizationsByIndividual(
|
||||
Collection<UserAuthorizationByIndividual> authorizationsByIndividual) {
|
||||
this.authorizationsByIndividual = authorizationsByIndividual;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(ProtectedObject object) {
|
||||
if (object instanceof User) {
|
||||
@ -233,17 +193,21 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
if (userId != 0L) {
|
||||
return AppLoader.getInstance(UserManager.class).load(userId);
|
||||
} else {
|
||||
User user = new User();
|
||||
user.setId(userId);
|
||||
user.setName("Anonymous");
|
||||
return user;
|
||||
return anonymous();
|
||||
}
|
||||
}
|
||||
|
||||
public static User anonymous() {
|
||||
User user = new User();
|
||||
user.setId(0L);
|
||||
user.setName("Guest");
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean implies(Permission permission) {
|
||||
// Root user can do anything
|
||||
if (isRoot())
|
||||
// Administrator can do anything
|
||||
if (isRoot() || isAdmin())
|
||||
return true;
|
||||
|
||||
if (permission instanceof ObjectPermission) {
|
||||
@ -253,40 +217,22 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
if (has(objectPermission.getObject()))
|
||||
return true;
|
||||
|
||||
for (RepositoryAuthorizationByIndividual authorization: getRepositoryAuthorizations()) {
|
||||
ObjectPermission repositoryPermission = new ObjectPermission(
|
||||
authorization.getRepository(), authorization.getAuthorizedOperation());
|
||||
if (repositoryPermission.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
|
||||
for (UserAuthorizationByIndividual each: getUserAuthorizations()) {
|
||||
ObjectPermission userPermission = new ObjectPermission(each.getUser(), each.getAuthorizedOperation());
|
||||
if (userPermission.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Team team: getTeams()) {
|
||||
if (team.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
|
||||
for (RoleMembership each: getRoleMemberships()) {
|
||||
if (each.getRole().implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Repository each: Gitop.getInstance(RepositoryManager.class).query(null)) {
|
||||
ObjectPermission repositoryPermission = new ObjectPermission(each, each.getDefaultAuthorizedOperation());
|
||||
if (repositoryPermission.implies(objectPermission))
|
||||
for (Project each: Gitop.getInstance(ProjectManager.class).query(null)) {
|
||||
ObjectPermission projectPermission = new ObjectPermission(each, each.getDefaultAuthorizedOperation());
|
||||
if (projectPermission.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// check if is public access
|
||||
for (Repository each: Gitop.getInstance(RepositoryManager.class).findPublic()) {
|
||||
ObjectPermission repositoryPermission = new ObjectPermission(each, RepositoryOperation.READ);
|
||||
if (repositoryPermission.implies(objectPermission))
|
||||
for (Project each: Gitop.getInstance(ProjectManager.class).findPublic()) {
|
||||
ObjectPermission projectPermission = new ObjectPermission(each, GeneralOperation.READ);
|
||||
if (projectPermission.implies(objectPermission))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -301,4 +247,11 @@ public class User extends AbstractUser implements ProtectedObject {
|
||||
return getId() == 0L;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
if (getFullName() == null)
|
||||
return getName();
|
||||
else
|
||||
return getFullName();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
package com.pmease.gitop.core.model;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.UniqueConstraint;
|
||||
|
||||
import com.pmease.commons.hibernate.AbstractEntity;
|
||||
import com.pmease.gitop.core.permission.operation.UserOperation;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Entity
|
||||
@Table(uniqueConstraints={
|
||||
@UniqueConstraint(columnNames={"individual", "user"})
|
||||
})
|
||||
public class UserAuthorizationByIndividual extends AbstractEntity {
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private User individual;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(nullable=false)
|
||||
private User user;
|
||||
|
||||
private UserOperation authorizedOperation = UserOperation.READ;
|
||||
|
||||
public UserOperation getAuthorizedOperation() {
|
||||
return authorizedOperation;
|
||||
}
|
||||
|
||||
public void setAuthorizedOperation(UserOperation authorizedOperation) {
|
||||
this.authorizedOperation = authorizedOperation;
|
||||
}
|
||||
|
||||
public User getIndividual() {
|
||||
return individual;
|
||||
}
|
||||
|
||||
public void setIndividual(User individual) {
|
||||
this.individual = individual;
|
||||
}
|
||||
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
package com.pmease.gitop.core.permission;
|
||||
|
||||
import com.pmease.gitop.core.permission.operation.PrivilegedOperation;
|
||||
|
||||
public class BranchPermission {
|
||||
|
||||
private final String branchNames;
|
||||
|
||||
private final PrivilegedOperation branchOperation;
|
||||
|
||||
public BranchPermission(String branchNames, PrivilegedOperation branchOperation) {
|
||||
this.branchNames = branchNames;
|
||||
this.branchOperation = branchOperation;
|
||||
}
|
||||
|
||||
public String getBranchNames() {
|
||||
return branchNames;
|
||||
}
|
||||
|
||||
public PrivilegedOperation getBranchOperation() {
|
||||
return branchOperation;
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,14 +2,11 @@ package com.pmease.gitop.core.permission;
|
||||
|
||||
import org.apache.shiro.authz.Permission;
|
||||
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
import com.pmease.gitop.core.permission.object.ProtectedObject;
|
||||
import com.pmease.gitop.core.permission.object.SystemObject;
|
||||
import com.pmease.gitop.core.permission.operation.GeneralOperation;
|
||||
import com.pmease.gitop.core.permission.operation.PrivilegedOperation;
|
||||
import com.pmease.gitop.core.permission.operation.RepositoryOperation;
|
||||
import com.pmease.gitop.core.permission.operation.SystemOperation;
|
||||
import com.pmease.gitop.core.permission.operation.UserOperation;
|
||||
|
||||
/**
|
||||
* This class represents permissions to operate an account and its belongings.
|
||||
@ -56,31 +53,27 @@ public class ObjectPermission implements Permission {
|
||||
}
|
||||
|
||||
public static ObjectPermission ofUserAdmin(User user) {
|
||||
return new ObjectPermission(user, UserOperation.ADMINISTRATION);
|
||||
return new ObjectPermission(user, GeneralOperation.ADMINISTRATION);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofUserRead(User user) {
|
||||
return new ObjectPermission(user, UserOperation.READ);
|
||||
return new ObjectPermission(user, GeneralOperation.READ);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofUserWrite(User user) {
|
||||
return new ObjectPermission(user, UserOperation.WRITE);
|
||||
return new ObjectPermission(user, GeneralOperation.WRITE);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofRepositoryAdmin(Repository repository) {
|
||||
return new ObjectPermission(repository, RepositoryOperation.ADMINISTRATION);
|
||||
public static ObjectPermission ofProjectAdmin(Project project) {
|
||||
return new ObjectPermission(project, GeneralOperation.ADMINISTRATION);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofRepositoryRead(Repository repository) {
|
||||
return new ObjectPermission(repository, RepositoryOperation.READ);
|
||||
public static ObjectPermission ofProjectRead(Project project) {
|
||||
return new ObjectPermission(project, GeneralOperation.READ);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofRepositoryWrite(Repository repository) {
|
||||
return new ObjectPermission(repository, RepositoryOperation.WRITE);
|
||||
public static ObjectPermission ofProjectWrite(Project project) {
|
||||
return new ObjectPermission(project, GeneralOperation.WRITE);
|
||||
}
|
||||
|
||||
public static ObjectPermission ofSystem(SystemOperation operation) {
|
||||
return new ObjectPermission(new SystemObject(), operation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -8,7 +8,6 @@ import org.apache.shiro.authc.credential.CredentialsMatcher;
|
||||
import com.pmease.commons.hibernate.dao.GeneralDao;
|
||||
import com.pmease.commons.shiro.AbstractRealm;
|
||||
import com.pmease.commons.shiro.AbstractUser;
|
||||
import com.pmease.gitop.core.manager.RoleManager;
|
||||
import com.pmease.gitop.core.manager.TeamManager;
|
||||
import com.pmease.gitop.core.manager.UserManager;
|
||||
import com.pmease.gitop.core.model.User;
|
||||
@ -20,7 +19,7 @@ public class UserRealm extends AbstractRealm {
|
||||
|
||||
@Inject
|
||||
public UserRealm(GeneralDao generalDao, CredentialsMatcher credentialsMatcher,
|
||||
UserManager userManager, RoleManager roleManager, TeamManager teamManager) {
|
||||
UserManager userManager, TeamManager teamManager) {
|
||||
super(credentialsMatcher);
|
||||
|
||||
this.userManager = userManager;
|
||||
@ -31,9 +30,7 @@ public class UserRealm extends AbstractRealm {
|
||||
if (userId != 0L) {
|
||||
return userManager.load(userId);
|
||||
} else {
|
||||
User user = new User();
|
||||
user.setId(0L);
|
||||
return user;
|
||||
return User.anonymous();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
package com.pmease.gitop.core.permission.object;
|
||||
|
||||
public class SystemObject implements ProtectedObject {
|
||||
|
||||
@Override
|
||||
public boolean has(ProtectedObject object) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package com.pmease.gitop.core.permission.operation;
|
||||
|
||||
public enum GeneralOperation implements PrivilegedOperation {
|
||||
|
||||
NO_ACCESS("No Access") {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return false;
|
||||
}
|
||||
|
||||
},
|
||||
READ("Read") {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == READ;
|
||||
}
|
||||
|
||||
},
|
||||
WRITE("Write") {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == WRITE || READ.can(operation);
|
||||
}
|
||||
|
||||
},
|
||||
ADMINISTRATION("Administration") {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
private final String displayName;
|
||||
|
||||
GeneralOperation(String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package com.pmease.gitop.core.permission.operation;
|
||||
|
||||
public enum RepositoryOperation implements PrivilegedOperation {
|
||||
READ {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == READ;
|
||||
}
|
||||
|
||||
},
|
||||
WRITE {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == WRITE || READ.can(operation);
|
||||
}
|
||||
|
||||
},
|
||||
ADMINISTRATION {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -8,14 +8,6 @@ public enum SystemOperation implements PrivilegedOperation {
|
||||
return true;
|
||||
}
|
||||
|
||||
},
|
||||
VOTE {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == VOTE;
|
||||
}
|
||||
|
||||
},
|
||||
ADD_COMMENT {
|
||||
|
||||
@ -24,6 +16,14 @@ public enum SystemOperation implements PrivilegedOperation {
|
||||
return operation == ADD_COMMENT;
|
||||
}
|
||||
|
||||
},
|
||||
CREATE_PROJECT {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == CREATE_PROJECT;
|
||||
}
|
||||
|
||||
},
|
||||
CREATE_MERGE_REQUEST {
|
||||
|
||||
@ -32,31 +32,5 @@ public enum SystemOperation implements PrivilegedOperation {
|
||||
return operation == CREATE_MERGE_REQUEST;
|
||||
}
|
||||
|
||||
},
|
||||
CREATE_REPOSITORY {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == CREATE_REPOSITORY;
|
||||
}
|
||||
|
||||
},
|
||||
READ_ALL_REPOSITORIES {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == READ_ALL_REPOSITORIES || RepositoryOperation.READ.can(operation);
|
||||
}
|
||||
|
||||
},
|
||||
WRITE_ALL_REPOSITORIES {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == WRITE_ALL_REPOSITORIES
|
||||
|| READ_ALL_REPOSITORIES.can(operation)
|
||||
|| RepositoryOperation.WRITE.can(operation);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
package com.pmease.gitop.core.permission.operation;
|
||||
|
||||
public enum UserOperation implements PrivilegedOperation {
|
||||
READ {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == READ || RepositoryOperation.READ.can(operation);
|
||||
}
|
||||
|
||||
},
|
||||
WRITE {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return operation == WRITE || READ.can(operation) || RepositoryOperation.WRITE.can(operation);
|
||||
}
|
||||
|
||||
},
|
||||
ADMINISTRATION {
|
||||
|
||||
@Override
|
||||
public boolean can(PrivilegedOperation operation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -10,16 +10,16 @@ import com.pmease.commons.editable.annotation.Editable;
|
||||
@Editable
|
||||
public class StorageSetting implements Serializable {
|
||||
|
||||
private String repoStorageDir;
|
||||
private String storageDir;
|
||||
|
||||
@Editable
|
||||
@NotEmpty
|
||||
public String getRepoStorageDir() {
|
||||
return repoStorageDir;
|
||||
public String getStorageDir() {
|
||||
return storageDir;
|
||||
}
|
||||
|
||||
public void setRepoStorageDir(String repoStorageDir) {
|
||||
this.repoStorageDir = repoStorageDir;
|
||||
public void setStorageDir(String storageDir) {
|
||||
this.storageDir = storageDir;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,11 +4,11 @@ import java.io.File;
|
||||
|
||||
import com.pmease.commons.util.FileUtils;
|
||||
|
||||
public class RepositoryStorage {
|
||||
public class ProjectStorage {
|
||||
|
||||
private final File storageDir;
|
||||
|
||||
public RepositoryStorage(File storageDir) {
|
||||
public ProjectStorage(File storageDir) {
|
||||
this.storageDir = storageDir;
|
||||
}
|
||||
|
||||
@ -5,9 +5,9 @@ import org.apache.wicket.markup.html.form.Form;
|
||||
import com.pmease.commons.editable.EditContext;
|
||||
import com.pmease.commons.wicket.editable.EditHelper;
|
||||
import com.pmease.gitop.core.Gitop;
|
||||
import com.pmease.gitop.core.manager.RepositoryManager;
|
||||
import com.pmease.gitop.core.manager.ProjectManager;
|
||||
import com.pmease.gitop.core.manager.UserManager;
|
||||
import com.pmease.gitop.core.model.Repository;
|
||||
import com.pmease.gitop.core.model.Project;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class TestPage extends BasePage {
|
||||
@ -16,7 +16,7 @@ public class TestPage extends BasePage {
|
||||
protected void onInitialize() {
|
||||
super.onInitialize();
|
||||
|
||||
final EditContext editContext = EditHelper.getContext(new Repository());
|
||||
final EditContext editContext = EditHelper.getContext(new Project());
|
||||
|
||||
Form<?> form = new Form<Void>("form") {
|
||||
|
||||
@ -25,9 +25,9 @@ public class TestPage extends BasePage {
|
||||
super.onSubmit();
|
||||
editContext.validate();
|
||||
if (!editContext.hasValidationError(true)) {
|
||||
Repository repository = (Repository) editContext.getBean();
|
||||
repository.setOwner(Gitop.getInstance(UserManager.class).getRootUser());
|
||||
Gitop.getInstance(RepositoryManager.class).save(repository);
|
||||
Project project = (Project) editContext.getBean();
|
||||
project.setOwner(Gitop.getInstance(UserManager.class).getRootUser());
|
||||
Gitop.getInstance(ProjectManager.class).save(project);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user