Index: topia-service/src/java/org/codelutin/topia/taas/TaasService.java diff -u topia-service/src/java/org/codelutin/topia/taas/TaasService.java:1.7 topia-service/src/java/org/codelutin/topia/taas/TaasService.java:1.8 --- topia-service/src/java/org/codelutin/topia/taas/TaasService.java:1.7 Thu Dec 13 17:03:09 2007 +++ topia-service/src/java/org/codelutin/topia/taas/TaasService.java Tue Dec 18 11:27:42 2007 @@ -24,14 +24,15 @@ * Created: 10 févr. 2006 * * @author Arnaud Thimel -* @version $Revision: 1.7 $ +* @version $Revision: 1.8 $ * -* Mise a jour: $Date: 2007-12-13 17:03:09 $ +* Mise a jour: $Date: 2007-12-18 11:27:42 $ * par : $Author: ruchaud $ */ package org.codelutin.topia.taas; +import java.lang.reflect.Constructor; import java.security.AccessController; import java.security.Permission; import java.util.List; @@ -51,11 +52,11 @@ import org.codelutin.topia.taas.entities.TaasAuthorizationImpl; import org.codelutin.topia.taas.entities.TaasPrincipalImpl; import org.codelutin.topia.taas.entities.TaasUserImpl; -import org.codelutin.topia.taas.interceptor.TaasAccessInterceptor; import org.codelutin.topia.taas.jaas.TaasConfiguration; import org.codelutin.topia.taas.jaas.TaasLoginModule; import org.codelutin.topia.taas.jaas.TaasPermission; import org.codelutin.topia.taas.jaas.TaasPolicy; +import org.hibernate.Interceptor; /** * Service pour la sécurité @@ -109,12 +110,15 @@ rootContext = context; try { org.hibernate.cfg.Configuration configuration = rootContext.getHibernateConfiguration(); - String interceptor = configuration.getProperty(SERVICE_INTERCEPTOR); - if(!"false".equals(interceptor)) { - configuration.setInterceptor(new TaasAccessInterceptor(this)); + String interceptorString = configuration.getProperty(SERVICE_INTERCEPTOR); + if(interceptorString != null && !"".equals(interceptorString)) { + Class interceptorClass = (Class) Class.forName(interceptorString); + Constructor interceptorConstructor = interceptorClass.getConstructor(TaasService.class); + Interceptor interceptor = interceptorConstructor.newInstance(this); + configuration.setInterceptor(interceptor); } transaction = (TopiaContextImplementor) rootContext.beginTransaction(); - } catch (TopiaException e) { + } catch (Exception e) { throw new SecurityException("Init security error", e); } return true; @@ -145,6 +149,25 @@ * @throws SecurityException en cas d'erreur de sécurité */ public void check(TopiaEntity entity, int actions) throws SecurityException { + Subject subject = Subject.getSubject(AccessController.getContext()); + if (subject != null) { + try { + AccessController.checkPermission(new TaasPermission(entity.getTopiaId(), actions)); + } catch (SecurityException se) { + throw new SecurityException("Access denied to object \"" + entity.getTopiaId() + "\" for \"" + subject + "\""); + } + } else { + throw new SecurityException("Use doAs() and login first"); + } + } + + /** + * Permet de vérifier les authorizations + * @param entity entité + * @param actions actions + * @throws SecurityException en cas d'erreur de sécurité + */ + public void checkRequestPermission(TopiaEntity entity, int actions) throws SecurityException { List permissions = getRequestPermission(entity, actions); Subject subject = Subject.getSubject(AccessController.getContext());