James Moger
2013-02-25 64b6f382d35e1fea0172b222277dae0312f274e4
src/com/gitblit/FileUserService.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
@@ -270,12 +271,12 @@
   /**
    * Updates/writes all specified user objects.
    * 
    * @param model a list of user models
    * @param models a list of user models
    * @return true if update is successful
    * @since 1.2.0
    */
   @Override
   public boolean updateUserModels(List<UserModel> models) {
   public boolean updateUserModels(Collection<UserModel> models) {
      try {         
         Properties allUsers = read();
         for (UserModel model : models) {
@@ -329,8 +330,7 @@
         UserModel oldUser = getUserModel(username);
         List<String> roles;
         if (model.permissions == null) {
            // legacy, use repository list
            roles = new ArrayList<String>(model.repositories);
            roles = new ArrayList<String>();
         } else {
            // discrete repository permissions
            roles = new ArrayList<String>();
@@ -780,10 +780,27 @@
                  } else if (role.charAt(0) == '%') {
                     postReceive.add(role.substring(1));
                  } else {
                     switch (role.charAt(0)) {
                     case '#':
                        // Permissions
                        if (role.equalsIgnoreCase(Constants.ADMIN_ROLE)) {
                           team.canAdmin = true;
                        } else if (role.equalsIgnoreCase(Constants.FORK_ROLE)) {
                           team.canFork = true;
                        } else if (role.equalsIgnoreCase(Constants.CREATE_ROLE)) {
                           team.canCreate = true;
                        }
                        break;
                     default:
                        repositories.add(role);
                     }
                     repositories.add(role);
                  }
               }
               team.addRepositoryPermissions(repositories);
               if (!team.canAdmin) {
                  // only read permissions for non-admin teams
                  team.addRepositoryPermissions(repositories);
               }
               team.addUsers(users);
               team.addMailingLists(mailingLists);
               team.preReceiveScripts.addAll(preReceive);
@@ -981,7 +998,7 @@
    * @return true if update is successful
    * @since 1.2.0
    */
   public boolean updateTeamModels(List<TeamModel> models) {
   public boolean updateTeamModels(Collection<TeamModel> models) {
      try {
         Properties allUsers = read();
         for (TeamModel model : models) {
@@ -1040,6 +1057,17 @@
         }
      }
      
      // Permissions
      if (model.canAdmin) {
         roles.add(Constants.ADMIN_ROLE);
      }
      if (model.canFork) {
         roles.add(Constants.FORK_ROLE);
      }
      if (model.canCreate) {
         roles.add(Constants.CREATE_ROLE);
      }
      for (String role : roles) {
            sb.append(role);
            sb.append(',');