Index: topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.2 topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.3 --- topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java:1.2 Wed Oct 18 17:10:11 2006 +++ topia-security/src/java/org/codelutin/topia/security/TopiaSecurityServiceImpl.java Tue Oct 24 12:01:00 2006 @@ -39,6 +39,8 @@ import org.codelutin.topia.TopiaContext; import org.codelutin.topia.TopiaException; import org.codelutin.topia.TopiaServiceDAOHelper; +import org.codelutin.topia.event.TopiaTransactionEvent; +import org.codelutin.topia.event.TopiaTransactionVetoable; import org.codelutin.topia.framework.TopiaContextImplementor; import org.codelutin.topia.security.entities.authorization.TopiaAssociationAuthorizationDAO; import org.codelutin.topia.security.entities.authorization.TopiaAuthorization; @@ -55,8 +57,8 @@ import org.codelutin.topia.security.jaas.TopiaPolicy; import org.codelutin.topia.security.listener.PropertyReadListener; import org.codelutin.topia.security.listener.PropertyWriteListener; -import org.codelutin.topia.security.listener.VetoableEntityListener; -import org.codelutin.topia.security.listener.VetoablePropertyListener; +import org.codelutin.topia.security.listener.EntityVetoable; +import org.codelutin.topia.security.listener.PropertyVetoable; import org.codelutin.topia.security.util.TopiaSecurityCaching; import org.codelutin.topia.security.util.TopiaSecurityUtil; @@ -66,7 +68,8 @@ * * @author ruchaud */ -public class TopiaSecurityServiceImpl implements TopiaSecurityService { +public class TopiaSecurityServiceImpl implements TopiaSecurityService, + TopiaTransactionVetoable { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(TopiaSecurityServiceImpl.class); @@ -76,10 +79,10 @@ private TopiaContext securityContext; /* Listeners */ - private VetoableEntityListener entityListener = new VetoableEntityListener(this); - private PropertyReadListener readListener = new PropertyReadListener(this); - private PropertyWriteListener writeListener = new PropertyWriteListener(this); - private VetoablePropertyListener propertyListener = new VetoablePropertyListener(readListener, writeListener); + private EntityVetoable entityVetoable = new EntityVetoable(this); + private PropertyReadListener read = new PropertyReadListener(this); + private PropertyWriteListener write = new PropertyWriteListener(this); + private PropertyVetoable propertyVetoable = new PropertyVetoable(read, write); /* Policy */ private TopiaPolicy policy = new TopiaPolicy(this); @@ -118,15 +121,24 @@ this.rootContext = context; this.securityContext = null; - rootContext.addVetoableListener(entityListener); - rootContext.addVetoableLoadListener(entityListener); - rootContext.addTopiaEntityLoadListener(propertyListener); - rootContext.addTopiaEntityListener(propertyListener); + rootContext.addTopiaEntityVetoable(entityVetoable); + rootContext.addTopiaEntityListener(propertyVetoable); + rootContext.addTopiaTransactionVetoable(this); policy.installPolicy(); Configuration.setConfiguration(new TopiaConfiguration("topia", this)); } + /** + * Permet de propager la sécurité sur l'ensemble des contextes + */ + public void beginTransaction(TopiaTransactionEvent event) { + TopiaContext context = event.getSource(); + context.addTopiaEntityVetoable(entityVetoable); + context.addTopiaEntityListener(propertyVetoable); + context.addTopiaTransactionVetoable(this); + } + /* * (non-Javadoc) * @see org.codelutin.topia.security.TopiaSecurityManager#getSecurityContext()