From 20714aee0d2d2a989d93d6065e081aed8ac85fbf Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 10 Oct 2012 00:05:34 -0400
Subject: [PATCH] Finer-grained repository access permissions (issue 36)
---
src/com/gitblit/Constants.java | 72 ++++++++++++++++++++++++++++++++++++
1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/src/com/gitblit/Constants.java b/src/com/gitblit/Constants.java
index c831c42..ed48bd2 100644
--- a/src/com/gitblit/Constants.java
+++ b/src/com/gitblit/Constants.java
@@ -15,6 +15,10 @@
*/
package com.gitblit;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
/**
* Constant values used by Gitblit.
@@ -309,4 +313,72 @@
return null;
}
}
+
+ /**
+ * The access permissions available for a repository.
+ */
+ public static enum AccessPermission {
+ NONE("N"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+");
+
+ public static AccessPermission LEGACY = REWIND;
+
+ public final String code;
+
+ private AccessPermission(String code) {
+ this.code = code;
+ }
+
+ public boolean atLeast(AccessPermission perm) {
+ return ordinal() >= perm.ordinal();
+ }
+
+ public boolean exceeds(AccessPermission perm) {
+ return ordinal() > perm.ordinal();
+ }
+
+ public String asRole(String repository) {
+ return code + ":" + repository;
+ }
+
+ @Override
+ public String toString() {
+ return code;
+ }
+
+ public static AccessPermission permissionFromRole(String role) {
+ String [] fields = role.split(":", 2);
+ if (fields.length == 1) {
+ // legacy/undefined assume full permissions
+ return AccessPermission.LEGACY;
+ } else {
+ // code:repository
+ return AccessPermission.fromCode(fields[0]);
+ }
+ }
+
+ public static String repositoryFromRole(String role) {
+ String [] fields = role.split(":", 2);
+ if (fields.length == 1) {
+ // legacy/undefined assume full permissions
+ return role;
+ } else {
+ // code:repository
+ return fields[1];
+ }
+ }
+
+ public static AccessPermission fromCode(String code) {
+ for (AccessPermission perm : values()) {
+ if (perm.code.equalsIgnoreCase(code)) {
+ return perm;
+ }
+ }
+ return AccessPermission.NONE;
+ }
+ }
+
+ @Documented
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface Unused {
+ }
}
--
Gitblit v1.9.1