/**
  * Checks whether a role is specifically allowed to access the request action This method ignores
  * the "*" action and is here to play a maintenance role.
  */
 public boolean allowsSpecificRole(String action, String role) {
   SecurityAccess access = (SecurityAccess) getAccess(action);
   if (access.getAllAllows() != null) {
     Iterator allAllows = access.getAllows().iterator();
     while (allAllows.hasNext()) {
       SecurityAllow allow = (SecurityAllow) allAllows.next();
       if (allow.getRole() != null && allow.getRole().equals(role)) {
         return true;
       }
     }
   }
   return false;
 }
  /**
   * Add access elements to the access map. The elements will be appened to the appropiate map.
   *
   * @param accessMap to receive accessElements
   * @param accessElement to copy to access map
   */
  private void addAllows(Map accessMap, SecurityAccess accessElement) {
    SecurityAllow allowElement = null;
    String role = null;
    String group = null;
    Map ownerMap = null; // Map of owner allowed
    Map roleMap = null; // Map of roles allowed
    Map groupMap = null; // Map of groups allowed
    Map groupRoleMap = null; // Map of group role allowed	
    Map userMap = null; // Map of users allowed
    String userName = null;

    if (accessElement.getAllAllows() == null) {
      return;
    }

    // Add allows to the action Map
    for (Iterator allowIterator = accessElement.getAllAllows().iterator();
        allowIterator.hasNext(); ) {
      allowElement = (SecurityAllow) allowIterator.next();
      role = null;
      userName = null;
      group = null;

      // Add Owner
      if (allowElement.isOwner() == true) {
        ownerMap = (Map) accessMap.get(OWNER_MAP);
        if (ownerMap == null) {
          ownerMap = new HashMap();
          accessMap.put(OWNER_MAP, ownerMap);
        }
        ownerMap.put(null, null);
      }

      // Add Role
      role = allowElement.getRole();
      if (role != null) {
        // Role map
        roleMap = (Map) accessMap.get(ROLE_MAP);
        if (roleMap == null) {
          roleMap = new HashMap();
          accessMap.put(ROLE_MAP, roleMap);
        }
        roleMap.put(role, null);

        // Group role map
        groupRoleMap = (Map) accessMap.get(GROUP_ROLE_MAP);
        if (groupRoleMap == null) {
          groupRoleMap = new HashMap();
          accessMap.put(GROUP_ROLE_MAP, groupRoleMap);
        }
        if (group == null) {
          group = GroupManagement.DEFAULT_GROUP_NAME;
        }
        groupRoleMap.put(group + role, null);
      }

      // Add Group
      group = allowElement.getGroup();
      if (group != null) {
        // Group map
        groupMap = (Map) accessMap.get(GROUP_MAP);
        if (groupMap == null) {
          groupMap = new HashMap();
          accessMap.put(GROUP_MAP, groupMap);
        }
        groupMap.put(group, null);

        // Group role map
        groupRoleMap = (Map) accessMap.get(GROUP_ROLE_MAP);
        if (groupRoleMap == null) {
          groupRoleMap = new HashMap();
          accessMap.put(GROUP_ROLE_MAP, groupRoleMap);
        }
        if (role == null) {
          role = RoleManagement.DEFAULT_ROLE_NAME;
        }
        groupRoleMap.put(group + role, null);
      }

      // Add User
      userName = allowElement.getUser();
      if (userName != null) {
        userMap = (Map) accessMap.get(USER_MAP);
        if (userMap == null) {
          userMap = new HashMap();
          accessMap.put(USER_MAP, userMap);
        }
        userMap.put(userName, null);
      }
    }
  }