James Moger
2012-04-25 e191104cd356faa2e261cc37585143878e23298d
src/com/gitblit/models/UserModel.java
@@ -16,38 +16,119 @@
package com.gitblit.models;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.security.Principal;
import java.util.HashSet;
import java.util.Set;
public class UserModel implements Serializable {
import com.gitblit.utils.StringUtils;
/**
 * UserModel is a serializable model class that represents a user and the user's
 * restricted repository memberships. Instances of UserModels are also used as
 * servlet user principals.
 *
 * @author James Moger
 *
 */
public class UserModel implements Principal, Serializable, Comparable<UserModel> {
   private static final long serialVersionUID = 1L;
   // field names are reflectively mapped in EditUser page
   public String username;
   public String password;
   public String displayName;
   public String emailAddress;
   public boolean canAdmin;
   public final List<String> repositories = new ArrayList<String>();
   public boolean excludeFromFederation;
   public final Set<String> repositories = new HashSet<String>();
   public final Set<TeamModel> teams = new HashSet<TeamModel>();
   public UserModel(String username) {
      this.username = username;
   }
   /**
    * This method does not take into consideration Ownership where the
    * administrator has not explicitly granted access to the owner.
    *
    * @param repositoryName
    * @return
    */
   @Deprecated
   public boolean canAccessRepository(String repositoryName) {
      return canAdmin || repositories.contains(repositoryName);
      return canAdmin || repositories.contains(repositoryName.toLowerCase())
            || hasTeamAccess(repositoryName);
   }
   public void setRepositories(List<String> repositories) {
      this.repositories.clear();
      this.repositories.addAll(repositories);
   public boolean canAccessRepository(RepositoryModel repository) {
      boolean isOwner = !StringUtils.isEmpty(repository.owner)
            && repository.owner.equals(username);
      return canAdmin || isOwner || repositories.contains(repository.name.toLowerCase())
            || hasTeamAccess(repository.name);
   }
   public boolean hasTeamAccess(String repositoryName) {
      for (TeamModel team : teams) {
         if (team.hasRepository(repositoryName)) {
            return true;
         }
      }
      return false;
   }
   public boolean hasRepository(String name) {
      return repositories.contains(name.toLowerCase());
   }
   public void addRepository(String name) {
      repositories.add(name.toLowerCase());
   }
   public void removeRepository(String name) {
      repositories.remove(name.toLowerCase());
   }
   public boolean isTeamMember(String teamname) {
      for (TeamModel team : teams) {
         if (team.name.equalsIgnoreCase(teamname)) {
            return true;
         }
      }
      return false;
   }
   public TeamModel getTeam(String teamname) {
      if (teams == null) {
         return null;
      }
      for (TeamModel team : teams) {
         if (team.name.equalsIgnoreCase(teamname)) {
            return team;
         }
      }
      return null;
   }
   @Override
   public String getName() {
      return username;
   }
   public String getDisplayName() {
      if (StringUtils.isEmpty(displayName)) {
         return username;
      }
      return displayName;
   }
   @Override
   public String toString() {
      return username;
   }
   @Override
   public int compareTo(UserModel o) {
      return username.compareTo(o.username);
   }
}