summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/models/RegistrantAccessPermission.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/gitblit/models/RegistrantAccessPermission.java')
-rw-r--r--src/com/gitblit/models/RegistrantAccessPermission.java51
1 files changed, 50 insertions, 1 deletions
diff --git a/src/com/gitblit/models/RegistrantAccessPermission.java b/src/com/gitblit/models/RegistrantAccessPermission.java
index 4bdc2da4..8f4049a8 100644
--- a/src/com/gitblit/models/RegistrantAccessPermission.java
+++ b/src/com/gitblit/models/RegistrantAccessPermission.java
@@ -63,18 +63,67 @@ public class RegistrantAccessPermission implements Serializable, Comparable<Regi
public boolean isOwner() {
return PermissionType.OWNER.equals(permissionType);
}
+
+ public boolean isExplicit() {
+ return PermissionType.EXPLICIT.equals(permissionType);
+ }
+
+ public boolean isRegex() {
+ return PermissionType.REGEX.equals(permissionType);
+ }
+
+ public boolean isTeam() {
+ return PermissionType.TEAM.equals(permissionType);
+ }
public boolean isMissing() {
return PermissionType.MISSING.equals(permissionType);
}
+ public int getScore() {
+ switch (registrantType) {
+ case REPOSITORY:
+ if (isAdmin()) {
+ return 0;
+ }
+ if (isOwner()) {
+ return 1;
+ }
+ if (isExplicit()) {
+ return 2;
+ }
+ if (isRegex()) {
+ return 3;
+ }
+ if (isTeam()) {
+ return 4;
+ }
+ default:
+ return 0;
+ }
+ }
+
@Override
public int compareTo(RegistrantAccessPermission p) {
switch (registrantType) {
case REPOSITORY:
+ // repository permissions are sorted in score order
+ // to convey the order in which permissions are tested
+ int score1 = getScore();
+ int score2 = p.getScore();
+ if (score1 <= 2 && score2 <= 2) {
+ // group admin, owner, and explicit together
+ return StringUtils.compareRepositoryNames(registrant, p.registrant);
+ }
+ if (score1 < score2) {
+ return -1;
+ } else if (score2 < score1) {
+ return 1;
+ }
return StringUtils.compareRepositoryNames(registrant, p.registrant);
default:
- return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
+ // user and team permissions are string sorted
+ return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
}
}