]> source.dussan.org Git - gitblit.git/commitdiff
Ignore permission definitions for admins, it just confuses things
authorJames Moger <james.moger@gitblit.com>
Thu, 1 Nov 2012 21:32:13 +0000 (17:32 -0400)
committerJames Moger <james.moger@gitblit.com>
Thu, 1 Nov 2012 21:32:13 +0000 (17:32 -0400)
src/com/gitblit/ConfigUserService.java
src/com/gitblit/FileUserService.java
src/com/gitblit/models/TeamModel.java
src/com/gitblit/models/UserModel.java

index 015cef762fbded8312da5641e204aa42744ad17b..9ad805b674d2636572761f340eff858f60f60ca2 100644 (file)
@@ -841,7 +841,7 @@ public class ConfigUserService implements IUserService {
                        config.setStringList(USER, model.username, ROLE, roles);\r
 \r
                        // discrete repository permissions\r
-                       if (model.permissions != null) {\r
+                       if (model.permissions != null && !model.canAdmin) {\r
                                List<String> permissions = new ArrayList<String>();\r
                                for (Map.Entry<String, AccessPermission> entry : model.permissions.entrySet()) {\r
                                        if (entry.getValue().exceeds(AccessPermission.NONE)) {\r
@@ -872,23 +872,26 @@ public class ConfigUserService implements IUserService {
                        }\r
                        config.setStringList(TEAM, model.name, ROLE, roles);\r
                        \r
-                       if (model.permissions == null) {\r
-                               // null check on "final" repositories because JSON-sourced TeamModel\r
-                               // can have a null repositories object\r
-                               if (!ArrayUtils.isEmpty(model.repositories)) {\r
-                                       config.setStringList(TEAM, model.name, REPOSITORY, new ArrayList<String>(\r
-                                                       model.repositories));\r
-                               }\r
-                       } else {\r
-                               // discrete repository permissions\r
-                               List<String> permissions = new ArrayList<String>();\r
-                               for (Map.Entry<String, AccessPermission> entry : model.permissions.entrySet()) {\r
-                                       if (entry.getValue().exceeds(AccessPermission.NONE)) {\r
-                                               // code:repository (e.g. RW+:~james/myrepo.git\r
-                                               permissions.add(entry.getValue().asRole(entry.getKey()));\r
+                       if (!model.canAdmin) {\r
+                               // write team permission for non-admin teams\r
+                               if (model.permissions == null) {\r
+                                       // null check on "final" repositories because JSON-sourced TeamModel\r
+                                       // can have a null repositories object\r
+                                       if (!ArrayUtils.isEmpty(model.repositories)) {\r
+                                               config.setStringList(TEAM, model.name, REPOSITORY, new ArrayList<String>(\r
+                                                               model.repositories));\r
                                        }\r
+                               } else {\r
+                                       // discrete repository permissions\r
+                                       List<String> permissions = new ArrayList<String>();\r
+                                       for (Map.Entry<String, AccessPermission> entry : model.permissions.entrySet()) {\r
+                                               if (entry.getValue().exceeds(AccessPermission.NONE)) {\r
+                                                       // code:repository (e.g. RW+:~james/myrepo.git\r
+                                                       permissions.add(entry.getValue().asRole(entry.getKey()));\r
+                                               }\r
+                                       }\r
+                                       config.setStringList(TEAM, model.name, REPOSITORY, permissions);\r
                                }\r
-                               config.setStringList(TEAM, model.name, REPOSITORY, permissions);\r
                        }\r
 \r
                        // null check on "final" users because JSON-sourced TeamModel\r
@@ -975,10 +978,13 @@ public class ConfigUserService implements IUserService {
                                        user.excludeFromFederation = roles.contains(Constants.NOT_FEDERATED_ROLE);\r
 \r
                                        // repository memberships\r
-                                       Set<String> repositories = new HashSet<String>(Arrays.asList(config\r
-                                                       .getStringList(USER, username, REPOSITORY)));\r
-                                       for (String repository : repositories) {\r
-                                               user.addRepositoryPermission(repository);\r
+                                       if (!user.canAdmin) {\r
+                                               // non-admin, read permissions\r
+                                               Set<String> repositories = new HashSet<String>(Arrays.asList(config\r
+                                                               .getStringList(USER, username, REPOSITORY)));\r
+                                               for (String repository : repositories) {\r
+                                                       user.addRepositoryPermission(repository);\r
+                                               }\r
                                        }\r
 \r
                                        // update cache\r
@@ -998,8 +1004,11 @@ public class ConfigUserService implements IUserService {
                                        team.canFork = roles.contains(Constants.FORK_ROLE);\r
                                        team.canCreate = roles.contains(Constants.CREATE_ROLE);\r
                                        \r
-                                       team.addRepositoryPermissions(Arrays.asList(config.getStringList(TEAM, teamname,\r
-                                                       REPOSITORY)));\r
+                                       if (!team.canAdmin) {\r
+                                               // non-admin team, read permissions\r
+                                               team.addRepositoryPermissions(Arrays.asList(config.getStringList(TEAM, teamname,\r
+                                                               REPOSITORY)));\r
+                                       }\r
                                        team.addUsers(Arrays.asList(config.getStringList(TEAM, teamname, USER)));\r
                                        team.addMailingLists(Arrays.asList(config.getStringList(TEAM, teamname,\r
                                                        MAILINGLIST)));\r
index 39c9a5dc8abe88bb0652312fc507db6f95b7437d..056df820799d564da9abf9bf2bf7db73e35486db 100644 (file)
@@ -796,7 +796,10 @@ public class FileUserService extends FileSettings implements IUserService {
                                                        repositories.add(role);\r
                                                }\r
                                        }\r
-                                       team.addRepositoryPermissions(repositories);\r
+                                       if (!team.canAdmin) {\r
+                                               // only read permissions for non-admin teams\r
+                                               team.addRepositoryPermissions(repositories);\r
+                                       }\r
                                        team.addUsers(users);\r
                                        team.addMailingLists(mailingLists);\r
                                        team.preReceiveScripts.addAll(preReceive);\r
index 2560e5ce62481eda06dd8644d4de6356efc7e5c1..9587ca7a34271c3c3e7ea1e8130c256c90e7e5ea 100644 (file)
@@ -98,6 +98,10 @@ public class TeamModel implements Serializable, Comparable<TeamModel> {
         */\r
        public List<RegistrantAccessPermission> getRepositoryPermissions() {\r
                List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>();\r
+               if (canAdmin) {\r
+                       // team has REWIND access to all repositories\r
+                       return list;\r
+               }\r
                for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) {\r
                        String registrant = entry.getKey();\r
                        String source = null;\r
index 0c9b9cc1b11074ef8d58391d6545ab69d47f4a77..23322c26b0dca2dbab76e43fe418baff91111013 100644 (file)
@@ -138,23 +138,26 @@ public class UserModel implements Principal, Serializable, Comparable<UserModel>
         */\r
        public List<RegistrantAccessPermission> getRepositoryPermissions() {\r
                List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>();\r
+               if (canAdmin()) {\r
+                       // user has REWIND access to all repositories\r
+                       return list;\r
+               }\r
                for (Map.Entry<String, AccessPermission> entry : permissions.entrySet()) {\r
                        String registrant = entry.getKey();\r
+                       AccessPermission ap = entry.getValue();\r
                        String source = null;\r
-                       boolean editable = true;\r
+                       boolean mutable = true;\r
                        PermissionType pType = PermissionType.EXPLICIT;\r
-                       if (canAdmin()) {\r
-                               pType = PermissionType.ADMINISTRATOR;\r
-                               editable = false;\r
-                       } else if (isMyPersonalRepository(registrant)) {\r
+                       if (isMyPersonalRepository(registrant)) {\r
                                pType = PermissionType.OWNER;\r
-                               editable = false;\r
+                               ap = AccessPermission.REWIND;\r
+                               mutable = false;\r
                        } else if (StringUtils.findInvalidCharacter(registrant) != null) {\r
                                // a regex will have at least 1 invalid character\r
                                pType = PermissionType.REGEX;\r
                                source = registrant;\r
                        }\r
-                       list.add(new RegistrantAccessPermission(registrant, entry.getValue(), pType, RegistrantType.REPOSITORY, source, editable));\r
+                       list.add(new RegistrantAccessPermission(registrant, ap, pType, RegistrantType.REPOSITORY, source, mutable));\r
                }\r
                Collections.sort(list);\r
                return list;\r