Index: topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java diff -u topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.2 topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.3 --- topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.2 Thu Oct 5 07:49:44 2006 +++ topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java Thu Oct 5 14:22:07 2006 @@ -24,9 +24,9 @@ * Created: 15 févr. 2006 * * @author Arnaud Thimel -* @version $Revision: 1.2 $ +* @version $Revision: 1.3 $ * -* Mise a jour: $Date: 2006/10/05 07:49:44 $ +* Mise a jour: $Date: 2006/10/05 14:22:07 $ * par : $Author: ruchaud $ */ @@ -36,6 +36,9 @@ import java.security.AccessController; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.security.Principal; +import java.util.Arrays; +import java.util.List; import java.util.StringTokenizer; import javax.security.auth.Subject; @@ -43,8 +46,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.topia.TopiaException; +import org.codelutin.topia.TopiaNotFoundException; +import org.codelutin.topia.persistence.TopiaId; import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationImpl; +import org.codelutin.topia.security.entities.user.TopiaUser; import org.codelutin.topia.security.jaas.TopiaLoginModule; import org.codelutin.topia.security.jaas.TopiaPermission; @@ -227,9 +233,7 @@ public static void checkPermission(String topiaId, int actions) throws TopiaException { NUMBER_CHECK ++; Subject subj = Subject.getSubject(AccessController.getContext()); - if (subj == null && log.isWarnEnabled()) { - log.warn("Use doAs() and login first"); - } else { + if (subj != null) { try { TopiaEntityAuthorization authorization = new TopiaEntityAuthorizationImpl( topiaId, actions, subj.getPrincipals()); @@ -240,7 +244,35 @@ if (log.isTraceEnabled()) { log.trace("Permission granted for entity : " + topiaId); } + } else { + if(log.isWarnEnabled()) { + log.warn("Use doAs() and login first"); + } } } - + + /** + * Permet de récupérer parmis la liste des principals, le principal de type + * TopiaUser + * @return nom du principal de l'utilisateur + */ + public static String getUserPrincipal() { + Subject subject = Subject.getSubject(AccessController.getContext()); + if (subject != null) { + for (Principal principal : subject.getPrincipals()) { + try { + Class className = TopiaId.getClassName(principal.getName()); + if(className.equals(TopiaUser.class)) { + return principal.getName(); + } + } catch (TopiaNotFoundException e) { + if(log.isWarnEnabled()) { + log.warn("No Topia object"); + } + } + } + } + return null; + } + } //TopiaSecurityUtil