Index: topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java diff -u topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.7 topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.8 --- topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.7 Tue Jul 26 16:55:16 2005 +++ topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java Tue Jul 26 22:58:55 2005 @@ -23,9 +23,9 @@ * Created: 15 juillet 2005 17:39:35 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.7 $ + * @version $Revision: 1.8 $ * - * Last update: $Date: 2005/07/26 16:55:16 $ + * Last update: $Date: 2005/07/26 22:58:55 $ * by : $Author: thimel $ */ @@ -169,27 +169,17 @@ "l'utilisateur : " + login); } List groupPrincipals = new ArrayList(); - // Parcours des groupes lus dans le fichier - for (Enumeration e = groups.keys(); e.hasMoreElements();) { - String key = (String) e.nextElement(); - // Récupère les utilisateurs séparés par des "," - for (StringTokenizer sTK = new StringTokenizer( - groups.getProperty(key), ","); sTK.hasMoreTokens();) { - // Si le login fait partie du groupe, on ajoute le principal associé! - if (login.equals(sTK.nextToken().trim())) { - principals.add(new TopiaGroupPrincipal(key)); - break; - } - } - } + searchGroups(groups, groupPrincipals, login); + principals.addAll(groupPrincipals); return principals; } /** - * - * @param groups - * @param principals - * @param toFind + * Parcours récursivement les properties fournies et ajoute à "principals" + * les nouveaux TopiaGroupPrincipal correspondant à la chaine "toFind". + * @param groups L'objet Properties contenant les groupes + * @param principals Liste de TopiaGroupPrincipal déjà trouvé + * @param toFind identifiant à chercher dans groups */ private void searchGroups(Properties groups, List principals, String toFind) { for (Enumeration e = groups.keys(); e.hasMoreElements();) { @@ -200,7 +190,11 @@ groups.getProperty(key), ","); sTK.hasMoreTokens();) { // Si le login fait partie du groupe, on ajoute le principal associé! if (toFind.equals(sTK.nextToken().trim())) { - principals.add(new TopiaGroupPrincipal(key)); + TopiaGroupPrincipal group = new TopiaGroupPrincipal(key); + if (!principals.contains(group)) { + principals.add(group); + searchGroups(groups, principals, key); + } break; } }