Index: topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.7 topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.8 --- topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.7 Mon Oct 30 16:00:34 2006 +++ topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java Tue Nov 14 10:25:33 2006 @@ -263,6 +263,7 @@ permissions.add(permission); } } + getSecurityContext().commitTransaction(); return permissions; } @@ -352,16 +353,17 @@ //FIXME : Voir si on peut mettre en relation un objet vers plusieurs objets protected List getRealExpressions(String topiaId) { try { - List allBy = getSecurityContext().find("select distinct link.by from " + + List allBy = getSecurityContext().find("select distinct link.by from " + TopiaExpressionLink.class.getName() + " link where link.replace=?", topiaId); - - if(allBy == null) { + getSecurityContext().commitTransaction(); + + if(allBy == null) { allBy = new ArrayList(); - } - - allBy.add(topiaId); - return allBy; + } + + allBy.add(topiaId); + return allBy; } catch (TopiaException te) { throw new SecurityException("Replace expression for link failed", te); } @@ -376,16 +378,15 @@ */ protected int getRealActions(String topiaId, int actions) { try { - Class className = TopiaId.getClassName(topiaId); - Class[] interfaces = className.getInterfaces(); + Class klass = TopiaId.getClassName(topiaId); - if(ArrayUtils.contains(interfaces, NoSecurityLoad.class)) { + if(TopiaSecurityUtil.isImplement(klass, NoSecurityLoad.class)) { //LOAD actions &= UPDATE + DELETE + CREATE; } /* TODO: - if(ArrayUtils.contains(interfaces, NoEntityVetoableRead.class)) { + if(TopiaSecurityUtil.isImplement(klass, NoSecurityUpdate.class)) { // UPDATE actions &= LOAD + DELETE + CREATE; }