From 9715e11fe30eccafa4c8272316883c80ba036a6e Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 02 May 2013 22:59:02 -0400 Subject: [PATCH] Improve permission determination when repo is frozen or is not bare --- src/main/java/com/gitblit/models/TeamModel.java | 33 +++++++++++++++++++++++++++------ 1 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gitblit/models/TeamModel.java b/src/main/java/com/gitblit/models/TeamModel.java index 8e0d5d5..e0499f7 100644 --- a/src/main/java/com/gitblit/models/TeamModel.java +++ b/src/main/java/com/gitblit/models/TeamModel.java @@ -197,16 +197,29 @@ ap.permission = AccessPermission.NONE; ap.mutable = false; + // determine maximum permission for the repository + final AccessPermission maxPermission = + (repository.isFrozen || !repository.isBare) ? + AccessPermission.CLONE : AccessPermission.REWIND; + if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) { // anonymous rewind ap.permissionType = PermissionType.ANONYMOUS; - ap.permission = AccessPermission.REWIND; + if (AccessPermission.REWIND.atMost(maxPermission)) { + ap.permission = AccessPermission.REWIND; + } else { + ap.permission = maxPermission; + } return ap; } if (canAdmin) { ap.permissionType = PermissionType.ADMINISTRATOR; - ap.permission = AccessPermission.REWIND; + if (AccessPermission.REWIND.atMost(maxPermission)) { + ap.permission = AccessPermission.REWIND; + } else { + ap.permission = maxPermission; + } return ap; } @@ -215,7 +228,11 @@ AccessPermission p = permissions.get(repository.name.toLowerCase()); if (p != null && repository.accessRestriction.isValidPermission(p)) { ap.permissionType = PermissionType.EXPLICIT; - ap.permission = p; + if (p.atMost(maxPermission)) { + ap.permission = p; + } else { + ap.permission = maxPermission; + } ap.mutable = true; return ap; } @@ -227,7 +244,11 @@ if (p != null && repository.accessRestriction.isValidPermission(p)) { // take first match ap.permissionType = PermissionType.REGEX; - ap.permission = p; + if (p.atMost(maxPermission)) { + ap.permission = p; + } else { + ap.permission = maxPermission; + } ap.source = key; return ap; } @@ -252,8 +273,8 @@ ap.permissionType = PermissionType.ANONYMOUS; break; case NONE: - // implied REWIND or CLONE if frozen - ap.permission = repository.isFrozen ? AccessPermission.CLONE : AccessPermission.REWIND; + // implied REWIND or CLONE + ap.permission = maxPermission; ap.permissionType = PermissionType.ANONYMOUS; break; } -- Gitblit v1.9.1