From c721a5d012ac3b841e1203ccd7fb60981a345c83 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 30 Oct 2012 17:28:28 -0400 Subject: [PATCH] Replaced fork icon --- src/com/gitblit/models/TeamModel.java | 69 +++++++++++++++++++++++++++++++--- 1 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/com/gitblit/models/TeamModel.java b/src/com/gitblit/models/TeamModel.java index 0b9c506..e5e3b09 100644 --- a/src/com/gitblit/models/TeamModel.java +++ b/src/com/gitblit/models/TeamModel.java @@ -18,15 +18,19 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; +import java.util.Collections; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; +import com.gitblit.Constants.PermissionType; +import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; +import com.gitblit.utils.StringUtils; /** * TeamModel is a serializable model class that represents a group of users and @@ -41,11 +45,14 @@ // field names are reflectively mapped in EditTeam page public String name; + public boolean canAdmin; + public boolean canFork; + public boolean canCreate; public final Set<String> users = new HashSet<String>(); // retained for backwards-compatibility with RPC clients @Deprecated public final Set<String> repositories = new HashSet<String>(); - public final Map<String, AccessPermission> permissions = new HashMap<String, AccessPermission>(); + public final Map<String, AccessPermission> permissions = new LinkedHashMap<String, AccessPermission>(); public final Set<String> mailingLists = new HashSet<String>(); public final List<String> preReceiveScripts = new ArrayList<String>(); public final List<String> postReceiveScripts = new ArrayList<String>(); @@ -82,6 +89,28 @@ public void removeRepository(String name) { removeRepositoryPermission(name); } + + + /** + * Returns a list of repository permissions for this team. + * + * @return the team's list of permissions + */ + public List<RegistrantAccessPermission> getRepositoryPermissions() { + List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); + for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) { + String registrant = entry.getKey(); + boolean editable = true; + PermissionType pType = PermissionType.EXPLICIT; + if (StringUtils.findInvalidCharacter(registrant) != null) { + // a regex will have at least 1 invalid character + pType = PermissionType.REGEX; + } + list.add(new RegistrantAccessPermission(registrant, entry.getValue(), pType, RegistrantType.REPOSITORY, editable)); + } + Collections.sort(list); + return list; + } /** * Returns true if the team has any type of specified access permission for @@ -92,7 +121,33 @@ */ public boolean hasRepositoryPermission(String name) { String repository = AccessPermission.repositoryFromRole(name).toLowerCase(); - return permissions.containsKey(repository) || repositories.contains(repository); + if (permissions.containsKey(repository)) { + // exact repository permission specified + return true; + } else { + // search for regex permission match + for (String key : permissions.keySet()) { + if (name.matches(key)) { + AccessPermission p = permissions.get(key); + if (p != null) { + return true; + } + } + } + } + return false; + } + + /** + * Returns true if the team has an explicitly specified access permission for + * this repository. + * + * @param name + * @return if the team has an explicitly specified access permission + */ + public boolean hasExplicitRepositoryPermission(String name) { + String repository = AccessPermission.repositoryFromRole(name).toLowerCase(); + return permissions.containsKey(repository); } /** @@ -138,12 +193,14 @@ permission = p; } } else { - // search for regex permission match + // search for case-insensitive regex permission match for (String key : permissions.keySet()) { - if (repository.name.matches(key)) { + if (StringUtils.matchesIgnoreCase(repository.name, key)) { AccessPermission p = permissions.get(key); if (p != null) { permission = p; + // take first match + break; } } } @@ -151,7 +208,7 @@ return permission; } - private boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) { + protected boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) { if (repository.accessRestriction.atLeast(ifRestriction)) { AccessPermission permission = getRepositoryPermission(repository); return permission.atLeast(requirePermission); -- Gitblit v1.9.1