From ea9526d456219a063296ddce2f29c9de802ffa8c Mon Sep 17 00:00:00 2001 From: "kaspars.kurms" Date: Mon, 11 Jul 2016 12:55:21 +0300 Subject: fix user effective permission display if users is in multiple groups with different permissions --- src/main/java/com/gitblit/models/UserModel.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/main/java/com/gitblit') diff --git a/src/main/java/com/gitblit/models/UserModel.java b/src/main/java/com/gitblit/models/UserModel.java index 1d9e413b..1d95569f 100644 --- a/src/main/java/com/gitblit/models/UserModel.java +++ b/src/main/java/com/gitblit/models/UserModel.java @@ -136,6 +136,7 @@ public class UserModel implements Principal, Serializable, Comparable // include immutable team permissions, being careful to preserve order Set set = new LinkedHashSet(list); + ArrayList arrayList = new ArrayList(list); for (TeamModel team : teams) { for (RegistrantAccessPermission teamPermission : team.getRepositoryPermissions()) { // we can not change an inherited team permission, though we can override @@ -143,6 +144,18 @@ public class UserModel implements Principal, Serializable, Comparable teamPermission.permissionType = PermissionType.TEAM; teamPermission.source = team.name; teamPermission.mutable = false; + if(arrayList.contains(teamPermission) && arrayList.get(arrayList.indexOf(teamPermission)).permissionType != PermissionType.REGEX){ + //checking either to replace permission in set or not + if(teamPermission.permission.compareTo(arrayList.get(arrayList.indexOf(teamPermission)).permission) > 0 ){ + arrayList.remove(teamPermission); + arrayList.add(teamPermission); + set.remove(teamPermission); + set.add(teamPermission); + } + } + else{ + arrayList.add(teamPermission); + } set.add(teamPermission); } } -- cgit v1.2.3 From f2fc9cc57b8b70f5e521e7c56b5ee56db3bab35c Mon Sep 17 00:00:00 2001 From: Florian Zschocke Date: Sun, 7 Aug 2022 14:26:16 +0200 Subject: Rewrite fix without the additional List This also removes the additional Set. What changes is that the order of the repositories is kept, but the resulting list will have user and team permissions intertwined. --- src/main/java/com/gitblit/models/UserModel.java | 27 +++++++++---------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'src/main/java/com/gitblit') diff --git a/src/main/java/com/gitblit/models/UserModel.java b/src/main/java/com/gitblit/models/UserModel.java index 1d95569f..b0933093 100644 --- a/src/main/java/com/gitblit/models/UserModel.java +++ b/src/main/java/com/gitblit/models/UserModel.java @@ -110,7 +110,7 @@ public class UserModel implements Principal, Serializable, Comparable * @return the user's list of permissions */ public List getRepositoryPermissions() { - List list = new ArrayList(); + List list = new ArrayList<>(); if (canAdmin()) { // user has REWIND access to all repositories return list; @@ -135,8 +135,6 @@ public class UserModel implements Principal, Serializable, Comparable Collections.sort(list); // include immutable team permissions, being careful to preserve order - Set set = new LinkedHashSet(list); - ArrayList arrayList = new ArrayList(list); for (TeamModel team : teams) { for (RegistrantAccessPermission teamPermission : team.getRepositoryPermissions()) { // we can not change an inherited team permission, though we can override @@ -144,22 +142,17 @@ public class UserModel implements Principal, Serializable, Comparable teamPermission.permissionType = PermissionType.TEAM; teamPermission.source = team.name; teamPermission.mutable = false; - if(arrayList.contains(teamPermission) && arrayList.get(arrayList.indexOf(teamPermission)).permissionType != PermissionType.REGEX){ - //checking either to replace permission in set or not - if(teamPermission.permission.compareTo(arrayList.get(arrayList.indexOf(teamPermission)).permission) > 0 ){ - arrayList.remove(teamPermission); - arrayList.add(teamPermission); - set.remove(teamPermission); - set.add(teamPermission); - } - } - else{ - arrayList.add(teamPermission); - } - set.add(teamPermission); + int i = list.indexOf(teamPermission); + if (i < 0) list.add(teamPermission); + else { + RegistrantAccessPermission lp = list.get(i); + if (teamPermission.permission.exceeds(lp.permission)) { + list.set(i, teamPermission); + } + } } } - return new ArrayList(set); + return list; } /** -- cgit v1.2.3