From 87f6c3e6510986a6676872aa64aed66fe7f24b01 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 22 Oct 2012 16:15:40 -0400
Subject: [PATCH] Differentiate between an explicit permission and a regex permission

---
 src/com/gitblit/GitBlit.java |   30 ++++++++++++++++++++----------
 1 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index ce556b6..e83da93 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -640,8 +640,10 @@
 	public List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository) {
 		List<RegistrantAccessPermission> permissions = new ArrayList<RegistrantAccessPermission>();
 		for (String user : userService.getUsernamesForRepositoryRole(repository.name)) {
-			AccessPermission ap = userService.getUserModel(user).getRepositoryPermission(repository);
-			permissions.add(new RegistrantAccessPermission(user, ap, RegistrantType.USER));
+			UserModel model = userService.getUserModel(user);
+			AccessPermission ap = model.getRepositoryPermission(repository);
+			boolean isExplicit = model.hasExplicitRepositoryPermission(repository.name);
+			permissions.add(new RegistrantAccessPermission(user, ap, isExplicit, RegistrantType.USER));
 		}
 		return permissions;
 	}
@@ -656,9 +658,12 @@
 	public boolean setUserAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions) {
 		List<UserModel> users = new ArrayList<UserModel>();
 		for (RegistrantAccessPermission up : permissions) {
-			UserModel user = userService.getUserModel(up.registrant);
-			user.setRepositoryPermission(repository.name, up.permission);
-			users.add(user);
+			if (up.isExplicit) {
+				// only set explicitly defined permissions
+				UserModel user = userService.getUserModel(up.registrant);
+				user.setRepositoryPermission(repository.name, up.permission);
+				users.add(user);
+			}
 		}
 		return userService.updateUserModels(users);
 	}
@@ -772,8 +777,10 @@
 	public List<RegistrantAccessPermission> getTeamAccessPermissions(RepositoryModel repository) {
 		List<RegistrantAccessPermission> permissions = new ArrayList<RegistrantAccessPermission>();
 		for (String team : userService.getTeamnamesForRepositoryRole(repository.name)) {
-			AccessPermission ap = userService.getTeamModel(team).getRepositoryPermission(repository);
-			permissions.add(new RegistrantAccessPermission(team, ap, RegistrantType.TEAM));
+			TeamModel model = userService.getTeamModel(team);
+			AccessPermission ap = model.getRepositoryPermission(repository);
+			boolean isExplicit = model.hasExplicitRepositoryPermission(repository.name);
+			permissions.add(new RegistrantAccessPermission(team, ap, isExplicit, RegistrantType.TEAM));
 		}
 		return permissions;
 	}
@@ -788,9 +795,12 @@
 	public boolean setTeamAccessPermissions(RepositoryModel repository, Collection<RegistrantAccessPermission> permissions) {
 		List<TeamModel> teams = new ArrayList<TeamModel>();
 		for (RegistrantAccessPermission tp : permissions) {
-			TeamModel team = userService.getTeamModel(tp.registrant);
-			team.setRepositoryPermission(repository.name, tp.permission);
-			teams.add(team);
+			if (tp.isExplicit) {
+				// only set explicitly defined access permissions
+				TeamModel team = userService.getTeamModel(tp.registrant);
+				team.setRepositoryPermission(repository.name, tp.permission);
+				teams.add(team);
+			}
 		}
 		return userService.updateTeamModels(teams);
 	}

--
Gitblit v1.9.1