From 1b84d3110165c0df933a54a03503beaa8290347d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 08 Nov 2012 16:08:10 -0500 Subject: [PATCH] Fix? for oodles of selected repositories in Lucene search (issue 152) --- src/com/gitblit/models/UserModel.java | 42 +++++++++++++++++++++++++++++++++--------- 1 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/com/gitblit/models/UserModel.java b/src/com/gitblit/models/UserModel.java index 0c9b9cc..1159905 100644 --- a/src/com/gitblit/models/UserModel.java +++ b/src/com/gitblit/models/UserModel.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -138,26 +139,42 @@ */ public List<RegistrantAccessPermission> getRepositoryPermissions() { List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(); + if (canAdmin()) { + // user has REWIND access to all repositories + return list; + } for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) { String registrant = entry.getKey(); + AccessPermission ap = entry.getValue(); String source = null; - boolean editable = true; + boolean mutable = true; PermissionType pType = PermissionType.EXPLICIT; - if (canAdmin()) { - pType = PermissionType.ADMINISTRATOR; - editable = false; - } else if (isMyPersonalRepository(registrant)) { + if (isMyPersonalRepository(registrant)) { pType = PermissionType.OWNER; - editable = false; + ap = AccessPermission.REWIND; + mutable = false; } else if (StringUtils.findInvalidCharacter(registrant) != null) { // a regex will have at least 1 invalid character pType = PermissionType.REGEX; source = registrant; } - list.add(new RegistrantAccessPermission(registrant, entry.getValue(), pType, RegistrantType.REPOSITORY, source, editable)); + list.add(new RegistrantAccessPermission(registrant, ap, pType, RegistrantType.REPOSITORY, source, mutable)); } Collections.sort(list); - return list; + + // include immutable team permissions, being careful to preserve order + Set<RegistrantAccessPermission> set = new LinkedHashSet<RegistrantAccessPermission>(list); + for (TeamModel team : teams) { + for (RegistrantAccessPermission teamPermission : team.getRepositoryPermissions()) { + // we can not change an inherited team permission, though we can override + teamPermission.registrantType = RegistrantType.REPOSITORY; + teamPermission.permissionType = PermissionType.TEAM; + teamPermission.source = team.name; + teamPermission.mutable = false; + set.add(teamPermission); + } + } + return new ArrayList<RegistrantAccessPermission>(set); } /** @@ -250,6 +267,13 @@ ap.permission = AccessPermission.NONE; ap.mutable = false; + if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) { + // anonymous rewind + ap.permissionType = PermissionType.ADMINISTRATOR; + ap.permission = AccessPermission.REWIND; + return ap; + } + // administrator if (canAdmin()) { ap.permissionType = PermissionType.ADMINISTRATOR; @@ -274,7 +298,7 @@ } if (AuthorizationControl.AUTHENTICATED.equals(repository.authorizationControl) && isAuthenticated) { - // AUTHENTICATED is a shortcut for authorizing all logged-in users RW access + // AUTHENTICATED is a shortcut for authorizing all logged-in users RW+ access ap.permission = AccessPermission.REWIND; return ap; } -- Gitblit v1.9.1