From ec7ac2149ba8603ff1455c948c07037bf6ee030c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 22 Oct 2012 16:07:14 -0400 Subject: [PATCH] Renamed method to UserModel.canCreate(String repository) --- src/com/gitblit/models/UserModel.java | 79 ++++++++++++++++++++++++++++++++++++++- 1 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index 6fe8df2..7733704 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -17,14 +17,18 @@ import java.io.Serializable; import java.security.Principal; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +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.AuthorizationControl; +import com.gitblit.Constants.RegistrantType; import com.gitblit.Constants.Unused; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.StringUtils; @@ -125,6 +129,21 @@ } /** + * Returns a list of repository permissions for this user exclusive of + * permissions inherited from team memberships. + * + * @return the user's list of permissions + */ + public List<RegistrantAccessPermission> getRepositoryPermissions() { + List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); + for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) { + list.add(new RegistrantAccessPermission(entry.getKey(), entry.getValue(), RegistrantType.REPOSITORY)); + } + Collections.sort(list); + return list; + } + + /** * Returns true if the user has any type of specified access permission for * this repository. * @@ -190,10 +209,10 @@ // 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 @@ -217,7 +236,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); @@ -345,6 +364,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) { @@ -405,4 +445,37 @@ public int compareTo(UserModel o) { return username.compareTo(o.username); } + + /** + * Returns true if the name/email pair match this user account. + * + * @param name + * @param email + * @return true, if the name and email address match this account + */ + public boolean is(String name, String email) { + // at a minimum a usename or display name must be supplied + if (StringUtils.isEmpty(name)) { + return false; + } + boolean nameVerified = name.equalsIgnoreCase(username) || name.equalsIgnoreCase(getDisplayName()); + boolean emailVerified = false; + if (StringUtils.isEmpty(emailAddress)) { + // user account has not specified an email address + // rely on username/displayname verification + emailVerified = true; + } else { + // user account has specified an email address + // require email address verification + if (!StringUtils.isEmpty(email)) { + emailVerified = email.equalsIgnoreCase(emailAddress); + } + } + return nameVerified && emailVerified; + } + + public boolean hasBranchPermission(String repositoryName, String branch) { + // Default UserModel doesn't implement branch-level security. Other Realms (i.e. Gerrit) may override this method. + return hasRepositoryPermission(repositoryName); + } } -- Gitblit v1.9.1