James Moger
2014-11-04 4e84166db5c5538e3984d9d2d6bb1f9902e65ee0
src/main/java/com/gitblit/models/TeamModel.java
@@ -27,17 +27,17 @@
import com.gitblit.Constants.AccessPermission;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AccountType;
import com.gitblit.Constants.PermissionType;
import com.gitblit.Constants.RegistrantType;
import com.gitblit.Constants.Unused;
import com.gitblit.utils.StringUtils;
/**
 * TeamModel is a serializable model class that represents a group of users and
 * a list of accessible repositories.
 *
 *
 * @author James Moger
 *
 *
 */
public class TeamModel implements Serializable, Comparable<TeamModel> {
@@ -48,6 +48,7 @@
   public boolean canAdmin;
   public boolean canFork;
   public boolean canCreate;
   public AccountType accountType;
   public final Set<String> users = new HashSet<String>();
   // retained for backwards-compatibility with RPC clients
   @Deprecated
@@ -59,41 +60,12 @@
   public TeamModel(String name) {
      this.name = name;
      this.accountType = AccountType.LOCAL;
   }
   /**
    * @use hasRepositoryPermission
    * @param name
    * @return
    */
   @Deprecated
   @Unused
   public boolean hasRepository(String name) {
      return hasRepositoryPermission(name);
   }
   @Deprecated
   @Unused
   public void addRepository(String name) {
      addRepositoryPermission(name);
   }
   @Deprecated
   @Unused
   public void addRepositories(Collection<String> names) {
      addRepositoryPermissions(names);
   }
   @Deprecated
   @Unused
   public void removeRepository(String name) {
      removeRepositoryPermission(name);
   }
   /**
    * Returns a list of repository permissions for this team.
    *
    *
    * @return the team's list of permissions
    */
   public List<RegistrantAccessPermission> getRepositoryPermissions() {
@@ -117,11 +89,11 @@
      Collections.sort(list);
      return list;
   }
   /**
    * Returns true if the team has any type of specified access permission for
    * this repository.
    *
    *
    * @param name
    * @return true if team has a specified access permission for the repository
    */
@@ -143,11 +115,11 @@
      }
      return false;
   }
   /**
    * Returns true if the team has an explicitly specified access permission for
    * this repository.
    *
    *
    * @param name
    * @return if the team has an explicitly specified access permission
    */
@@ -155,7 +127,7 @@
      String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
      return permissions.containsKey(repository);
   }
   /**
    * Adds a repository permission to the team.
    * <p>
@@ -178,28 +150,35 @@
         addRepositoryPermission(role);
      }
   }
   public AccessPermission removeRepositoryPermission(String name) {
      String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
      repositories.remove(repository);
      return permissions.remove(repository);
   }
   public void setRepositoryPermission(String repository, AccessPermission permission) {
      permissions.put(repository.toLowerCase(), permission);
      repositories.add(repository.toLowerCase());
      if (permission == null) {
         // remove the permission
         permissions.remove(repository.toLowerCase());
         repositories.remove(repository.toLowerCase());
      } else {
         // set the new permission
         permissions.put(repository.toLowerCase(), permission);
         repositories.add(repository.toLowerCase());
      }
   }
   public RegistrantAccessPermission getRepositoryPermission(RepositoryModel repository) {
      RegistrantAccessPermission ap = new RegistrantAccessPermission();
      ap.registrant = name;
      ap.registrantType = RegistrantType.TEAM;
      ap.permission = AccessPermission.NONE;
      ap.mutable = false;
      // determine maximum permission for the repository
      final AccessPermission maxPermission =
            (repository.isFrozen || !repository.isBare) ?
      final AccessPermission maxPermission =
            (repository.isFrozen || !repository.isBare || repository.isMirror) ?
                  AccessPermission.CLONE : AccessPermission.REWIND;
      if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) {
@@ -212,7 +191,7 @@
         }
         return ap;
      }
      if (canAdmin) {
         ap.permissionType = PermissionType.ADMINISTRATOR;
         if (AccessPermission.REWIND.atMost(maxPermission)) {
@@ -222,7 +201,7 @@
         }
         return ap;
      }
      if (permissions.containsKey(repository.name.toLowerCase())) {
         // exact repository permission specified
         AccessPermission p = permissions.get(repository.name.toLowerCase());
@@ -255,7 +234,7 @@
            }
         }
      }
      // still no explicit or regex, check for implicit permissions
      if (AccessPermission.NONE == ap.permission) {
         switch (repository.accessRestriction) {
@@ -282,7 +261,7 @@
      return ap;
   }
   protected boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) {
      if (repository.accessRestriction.atLeast(ifRestriction)) {
         RegistrantAccessPermission ap = getRepositoryPermission(repository);
@@ -290,7 +269,7 @@
      }
      return true;
   }
   public boolean canView(RepositoryModel repository) {
      return canAccess(repository, AccessRestrictionType.VIEW, AccessPermission.VIEW);
   }
@@ -351,6 +330,10 @@
      }
   }
   public boolean isLocalTeam() {
      return accountType.isLocal();
   }
   @Override
   public String toString() {
      return name;