From 2711bc82a373a3c2e357b5948e2a6e0c477d8534 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 22 Oct 2012 16:23:53 -0400 Subject: [PATCH] Fixed bug where owner could not edit a repository through web ui --- src/com/gitblit/models/UserModel.java | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index 38a7aae..6cc0778 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -28,6 +28,7 @@ import com.gitblit.Constants.AccessPermission; import com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.AuthorizationControl; +import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.StringUtils; @@ -133,10 +134,10 @@ * * @return the user's list of permissions */ - public List<RepositoryAccessPermission> getRepositoryPermissions() { - List<RepositoryAccessPermission> list = new ArrayList<RepositoryAccessPermission>(); + public List<RegistrantAccessPermission> getRepositoryPermissions() { + List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) { - list.add(new RepositoryAccessPermission(entry.getKey(), entry.getValue())); + list.add(new RegistrantAccessPermission(entry.getKey(), entry.getValue(), true, RegistrantType.REPOSITORY)); } Collections.sort(list); return list; @@ -166,6 +167,18 @@ } } return false; + } + + /** + * Returns true if the user has an explicitly specified access permission for + * this repository. + * + * @param name + * @return if the user has an explicitly specified access permission + */ + public boolean hasExplicitRepositoryPermission(String name) { + String repository = AccessPermission.repositoryFromRole(name).toLowerCase(); + return permissions.containsKey(repository); } /** @@ -208,15 +221,15 @@ // and the permissions of teams of which the user belongs AccessPermission permission = AccessPermission.NONE; if (permissions.containsKey(repository.name.toLowerCase())) { - // exact repository permission specified + // exact repository permission specified, use it AccessPermission p = permissions.get(repository.name.toLowerCase()); if (p != null) { - permission = p; + return 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; @@ -363,6 +376,27 @@ } return false; } + + /** + * Returns true if the user is allowed to create the specified repository. + * + * @param repository + * @return true if the user can create the repository + */ + public boolean canCreate(String repository) { + if (canAdmin()) { + // admins can create any repository + return true; + } + if (canCreate) { + String projectPath = StringUtils.getFirstPathElement(repository); + if (!StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username)) { + // personal repository + return true; + } + } + return false; + } public boolean isTeamMember(String teamname) { for (TeamModel team : teams) { -- Gitblit v1.9.1