Index: topia-security/src/java/org/codelutin/topia/security/TopiaSecurityManagerImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/TopiaSecurityManagerImpl.java:1.7 topia-security/src/java/org/codelutin/topia/security/TopiaSecurityManagerImpl.java:1.8 --- topia-security/src/java/org/codelutin/topia/security/TopiaSecurityManagerImpl.java:1.7 Thu Oct 5 07:49:44 2006 +++ topia-security/src/java/org/codelutin/topia/security/TopiaSecurityManagerImpl.java Thu Oct 5 14:22:07 2006 @@ -22,15 +22,12 @@ import static org.codelutin.topia.security.util.TopiaSecurityUtil.TOPIA_SECURITY_PERSISTENCE_CLASSES; -import java.security.AccessController; import java.security.Permission; -import java.security.Principal; import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.Set; -import javax.security.auth.Subject; import javax.security.auth.login.Configuration; import org.apache.commons.collections.map.ReferenceMap; @@ -53,6 +50,7 @@ import org.codelutin.topia.security.listener.VetoableEntityListener; import org.codelutin.topia.security.listener.VetoablePropertyListener; import org.codelutin.topia.security.util.TopiaSecurityCaching; +import org.codelutin.topia.security.util.TopiaSecurityUtil; /** * Implantation du manager pour la sécurité. C'est le point d'accès à l'ensemble @@ -201,6 +199,11 @@ return null; } + /** + * Permet d'ajouter dans le cache les permissions pour un principal donné. + * @param principalName nom du principal pour lequel on doit chargé les permissions + * @throws TopiaException + */ public void putPermissionsCache(String principalName) throws TopiaException { TopiaAuthorizationDAO authorizationDAO = getTopiaAuthorizationDAO(); Collection authorizations = authorizationDAO.findAll(); @@ -217,43 +220,57 @@ } } + /** + * Permet de récupérer depuis le cache les permissions pour un principal donné. + * @param principalName nom du principal + * @return permmissions d'un principal + */ public Set getPermissionsCache(String principalName) { return permissionsCache.get(principalName); } + /** + * Permet de mettre dans le cache pour l'utilisateur en cours si il a droit + * l'autorisation ou non de charger une entité. + * @param topiaId identification de l'entité + * @param authorized autorisation sur l'entité, true pour autorisé et false pour + * non autorisé + */ public void putEntitiesLoadingCache(String topiaId, boolean authorized) { - Subject subject = Subject.getSubject(AccessController.getContext()); - if (subject != null) { - for (Principal principal : subject.getPrincipals()) { - entitiesLoadingCache.put(authorized, principal.getName(), topiaId); - } + String userPrincipal = TopiaSecurityUtil.getUserPrincipal(); + if(userPrincipal != null) { + entitiesLoadingCache.put(authorized, userPrincipal, topiaId); } } + /** + * Permet de récupérer dans le cache pour l'utilisateur en cours si il a droit + * l'autorisation ou non de charger une entité. + * @param topiaId identification de l'entité + * @return autorisation sur l'entité, true pour autorisé et false pour + * non autorisé + */ public Boolean getEntitiesLoadingCache(String topiaId) { - boolean authorized = false; - boolean modified = false; - Subject subject = Subject.getSubject(AccessController.getContext()); - if (subject != null) { - for (Principal principal : subject.getPrincipals()) { - Object object = entitiesLoadingCache.get(principal.getName(), topiaId); - if(object != null) { - modified = true; - authorized |= (Boolean) object; - } - } - } - if(modified) { - return authorized; - } else { - return null; + String userPrincipal = TopiaSecurityUtil.getUserPrincipal(); + if(userPrincipal != null) { + return (Boolean) entitiesLoadingCache.get(userPrincipal, topiaId); } + return null; } - public void removeEntitiesLoadingCache(String principalName) { - entitiesLoadingCache.clear(principalName); + /** + * Permet de supprimer un entrée dans le cache pour un utilisateur + * @param userPrincipal principal de l'utilisateur + */ + public void removeEntitiesLoadingCache(String userPrincipal) { + entitiesLoadingCache.clear(userPrincipal); } + /** + * Permet de tester le cache + * @param topiaId identification de l'entité + * @return vrai si il trouve sinon faux + */ public boolean containEntitiesLoadingCache(String topiaId) { Boolean authorized = getEntitiesLoadingCache(topiaId); if(authorized != null) {