From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 05 Jan 2012 17:34:05 -0500 Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders --- src/com/gitblit/models/UserModel.java | 73 ++++++++++++++++++++++++++++++++++-- 1 files changed, 68 insertions(+), 5 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index aeeecf4..ecb97cf 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -17,8 +17,10 @@ import java.io.Serializable; import java.security.Principal; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; + +import com.gitblit.utils.StringUtils; /** * UserModel is a serializable model class that represents a user and the user's @@ -28,7 +30,7 @@ * @author James Moger * */ -public class UserModel implements Principal, Serializable { +public class UserModel implements Principal, Serializable, Comparable<UserModel> { private static final long serialVersionUID = 1L; @@ -36,18 +38,74 @@ public String username; public String password; public boolean canAdmin; - public final List<String> repositories = new ArrayList<String>(); + public boolean excludeFromFederation; + public final Set<String> repositories = new HashSet<String>(); + public final Set<TeamModel> teams = new HashSet<TeamModel>(); public UserModel(String username) { this.username = username; } + /** + * This method does not take into consideration Ownership where the + * administrator has not explicitly granted access to the owner. + * + * @param repositoryName + * @return + */ + @Deprecated public boolean canAccessRepository(String repositoryName) { - return canAdmin || repositories.contains(repositoryName.toLowerCase()); + return canAdmin || repositories.contains(repositoryName.toLowerCase()) + || hasTeamAccess(repositoryName); + } + + public boolean canAccessRepository(RepositoryModel repository) { + boolean isOwner = !StringUtils.isEmpty(repository.owner) + && repository.owner.equals(username); + return canAdmin || isOwner || repositories.contains(repository.name.toLowerCase()) + || hasTeamAccess(repository.name); + } + + public boolean hasTeamAccess(String repositoryName) { + for (TeamModel team : teams) { + if (team.hasRepository(repositoryName)) { + return true; + } + } + return false; + } + + public boolean hasRepository(String name) { + return repositories.contains(name.toLowerCase()); } public void addRepository(String name) { repositories.add(name.toLowerCase()); + } + + public void removeRepository(String name) { + repositories.remove(name.toLowerCase()); + } + + public boolean isTeamMember(String teamname) { + for (TeamModel team : teams) { + if (team.name.equalsIgnoreCase(teamname)) { + return true; + } + } + return false; + } + + public TeamModel getTeam(String teamname) { + if (teams == null) { + return null; + } + for (TeamModel team : teams) { + if (team.name.equalsIgnoreCase(teamname)) { + return team; + } + } + return null; } @Override @@ -59,4 +117,9 @@ public String toString() { return username; } + + @Override + public int compareTo(UserModel o) { + return username.compareTo(o.username); + } } -- Gitblit v1.9.1