Index: topia/src/java/org/codelutin/topia/security/TopiaAccessController.java diff -u topia/src/java/org/codelutin/topia/security/TopiaAccessController.java:1.2 topia/src/java/org/codelutin/topia/security/TopiaAccessController.java:1.3 --- topia/src/java/org/codelutin/topia/security/TopiaAccessController.java:1.2 Fri May 20 17:51:10 2005 +++ topia/src/java/org/codelutin/topia/security/TopiaAccessController.java Tue Jul 26 14:00:39 2005 @@ -24,7 +24,7 @@ * Created: 4 mai 2005 * * @author Arnaud Thimel -* @version $Revision: 1.2 $ +* @version $Revision: 1.3 $ */ @@ -39,51 +39,72 @@ import org.codelutin.topia.TopiaEntity; import org.codelutin.topia.TopiaException; - public class TopiaAccessController { - static private Logger log = Logger.getLogger("org.codelutin.topia.security.TopiaAccessController"); - - - /** - * Vérifie si l'utilisateur actuellement loggué a le droit d'accéder à - * l'entité passée en paramètre pour les actions spécifiées. - * @param entity l'entité pour laquelle on vérifie les droits - * @param actions les actions [read, write, admin] - * @throws TopiaSecurityException - */ - public static void checkPermission(TopiaEntity entity, String actions) throws TopiaSecurityException { - log.finest("Checking permissions to entity : " + entity); - if (entity == null) - throw new TopiaSecurityException("TopiaEntity cannot be null"); - String topiaId; - try { - topiaId = entity.get_topiaId_(); - } catch (TopiaException e) { - throw new TopiaSecurityException("Invalid TopiaEntity", e); - } - checkPermission(topiaId, actions); - } - - /** - * Vérifie si l'utilisateur actuellement loggué a le droit d'accéder à - * l'entité passée en paramètre pour les actions spécifiées. - * @param topiaId le topiaId de l'entité pour laquelle on vérifie les droits - * @param actions les actions [read, write, admin] - * @throws TopiaSecurityException - */ - public static void checkPermission(String topiaId, String actions) throws TopiaSecurityException { - if (actions == null) - actions = "read"; //TODO Arno : DEFAULT_ACTIONS ??? - Subject subj = Subject.getSubject(AccessController.getContext()); - if (subj == null) - throw new TopiaSecurityException("Use doAs() and login first"); - try { - AccessController.checkPermission(new TopiaPermission(topiaId, subj.getPrincipals(), actions)); - } catch (AccessControlException e) { - throw new TopiaSecurityException("access denied to object \"" + topiaId + "\" for \"" + subj + "\"", e); - } - log.finest("Permission granted for entity : " + topiaId); - } - -} + private static Logger log = Logger.getLogger("org.codelutin.topia.security.TopiaAccessController"); + + private static Boolean doSecurity; + + private static TopiaSecurityHelper securityHelper; + + public static void setSecurityHelper(TopiaSecurityHelper topiaSecurityHelper) { + if (securityHelper == null) // Initialisé une seuls fois ! + securityHelper = topiaSecurityHelper; + } + + public static boolean doSecurity() { + if (doSecurity == null) { + if (securityHelper == null) + return false; //On n'initialise pas doSecurity de manière à + //réessayer tant que le securityHelper n'a pas été initialisé + doSecurity = new Boolean(securityHelper.doSecurity()); + } + return doSecurity.booleanValue(); + } + + /** + * Vérifie si l'utilisateur actuellement loggué a le droit d'accéder à + * l'entité passée en paramètre pour les actions spécifiées. + * @param entity l'entité pour laquelle on vérifie les droits + * @param actions les actions [read, write, admin] + * @throws TopiaSecurityException + */ + public static void checkPermission(TopiaEntity entity, String actions) throws TopiaSecurityException { + if (!doSecurity()) + return; + log.finest("Checking permissions to entity : " + entity); + if (entity == null) + throw new TopiaSecurityException("TopiaEntity cannot be null"); + String topiaId; + try { + topiaId = entity.get_topiaId_(); + } catch (TopiaException e) { + throw new TopiaSecurityException("Invalid TopiaEntity", e); + } + checkPermission(topiaId, actions); + } + + /** + * Vérifie si l'utilisateur actuellement loggué a le droit d'accéder à + * l'entité passée en paramètre pour les actions spécifiées. + * @param topiaId le topiaId de l'entité pour laquelle on vérifie les droits + * @param actions les actions [read, write, admin] + * @throws TopiaSecurityException + */ + public static void checkPermission(String topiaId, String actions) throws TopiaSecurityException { + if (!doSecurity()) + return; + if (actions == null) + actions = "read"; //TODO Arno : DEFAULT_ACTIONS ??? + Subject subj = Subject.getSubject(AccessController.getContext()); + if (subj == null) + throw new TopiaSecurityException("Use doAs() and login first"); + try { + AccessController.checkPermission(new TopiaPermission(topiaId, subj.getPrincipals(), actions)); + } catch (AccessControlException e) { + throw new TopiaSecurityException("access denied to object \"" + topiaId + "\" for \"" + subj + "\"", e); + } + log.finest("Permission granted for entity : " + topiaId); + } + +} // TopiaAccessController Index: topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java diff -u topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.5 topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.6 --- topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java:1.5 Fri Jul 22 16:57:57 2005 +++ topia/src/java/org/codelutin/topia/security/TopiaSecurityHelper.java Tue Jul 26 14:00:39 2005 @@ -23,9 +23,9 @@ * Created: 15 juillet 2005 17:39:35 CEST * * @author Benjamin POUSSIN - * @version $Revision: 1.5 $ + * @version $Revision: 1.6 $ * - * Last update: $Date: 2005/07/22 16:57:57 $ + * Last update: $Date: 2005/07/26 14:00:39 $ * by : $Author: thimel $ */ @@ -88,6 +88,7 @@ policy.installPolicy(); addPermissionListener(policy); loadPermissions(); + TopiaAccessController.setSecurityHelper(this); } /** @@ -428,6 +429,14 @@ LoginContext ctx = new LoginContext(context.getContextName(), callbackHandler); ctx.login(); return ctx; + } + + /** + * Renvoie si oui ou non les controles de sécurité doivent être effectués + * @return + */ + public boolean doSecurity() { + return ("false".equals(properties.getProperty("security.skip"))); } } // TopiaSecurityHelper