/** This method gets a users roles */
  public List authorizeUser(String userName) throws Exception {
    List roles = new ArrayList();
    List groups = new ArrayList();

    String administratorUserName = CmsPropertyHandler.getAdministratorUserName();

    boolean isAdministrator = userName.equalsIgnoreCase(administratorUserName) ? true : false;
    if (isAdministrator) return roles;

    if (transactionObject == null) {
      List roleVOList = RoleController.getController().getRoleVOList(userName);
      Iterator roleVOListIterator = roleVOList.iterator();
      while (roleVOListIterator.hasNext()) {
        RoleVO roleVO = (RoleVO) roleVOListIterator.next();
        InfoGlueRole infoGlueRole =
            new InfoGlueRole(roleVO.getRoleName(), roleVO.getDescription(), this);
        roles.add(infoGlueRole);
      }

      List groupVOList = GroupController.getController().getGroupVOList(userName);
      Iterator groupVOListIterator = groupVOList.iterator();
      while (groupVOListIterator.hasNext()) {
        GroupVO groupVO = (GroupVO) groupVOListIterator.next();
        InfoGlueGroup infoGlueGroup =
            new InfoGlueGroup(groupVO.getGroupName(), groupVO.getDescription(), this);
        groups.add(infoGlueGroup);
      }
    } else {
      Collection roleList = RoleController.getController().getRoleList(userName, transactionObject);
      Iterator roleListIterator = roleList.iterator();
      while (roleListIterator.hasNext()) {
        Role role = (Role) roleListIterator.next();
        InfoGlueRole infoGlueRole =
            new InfoGlueRole(role.getRoleName(), role.getDescription(), this);
        roles.add(infoGlueRole);
      }

      Collection groupList =
          GroupController.getController().getGroupList(userName, transactionObject);
      Iterator groupListIterator = groupList.iterator();
      while (groupListIterator.hasNext()) {
        Group group = (Group) groupListIterator.next();
        InfoGlueGroup infoGlueGroup =
            new InfoGlueGroup(group.getGroupName(), group.getDescription(), this);
        groups.add(infoGlueGroup);
      }
    }

    return groups;
  }