Index: topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java:1.3 topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java:1.4 --- topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java:1.3 Fri Sep 15 16:12:04 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java Thu Sep 21 13:22:14 2006 @@ -23,12 +23,9 @@ import static org.codelutin.topia.security.TopiaSecurityUtil.actionsString2Int; import java.security.Principal; -import java.util.HashMap; -import java.util.HashSet; import java.util.Set; -import java.util.StringTokenizer; -import org.codelutin.topia.security.jaas.TopiaPrincipal; +import org.codelutin.topia.security.jaas.TopiaPrincipalMap; public class TopiaEntityAuthorizationImpl extends TopiaEntityAuthorizationAbstract implements TopiaEntityAuthorization { @@ -36,16 +33,14 @@ private static final long serialVersionUID = 1L; public TopiaEntityAuthorizationImpl() { - principals = new HashMap>(); + principals = new TopiaPrincipalMap(); } public TopiaEntityAuthorizationImpl(String id, int actions, Set principals) { this.id = id; this.actions = actions; - this.principals = new HashMap>(); - for (Principal principal : principals) { - addPrincipal(principal.getClass().getName(), principal.getName()); - } + this.principals = new TopiaPrincipalMap(); + this.principals.add(principals); } public void setActions(String actions) { @@ -53,25 +48,7 @@ } public void setPrincipals(String principals) { - principals = principals.replaceAll(" +", " ");// Un seul espace quand il y en a plusieurs - StringTokenizer tok = new StringTokenizer(principals, " ", false); - while (tok.hasMoreTokens()) { - String principalName = tok.nextToken(); - addPrincipal(TopiaPrincipal.class.getName(), principalName); - } - } - - protected void addPrincipal(String principalClass, String principalName) { - Set names = (Set) principals.get(principalClass); - if (names == null) { - principals.put(principalClass, names = new HashSet()); - } - if (principalName.trim().startsWith("[") && principalName.endsWith("]")) { - principalName = principalName.substring(1, principalName - .lastIndexOf("]")); - } - names.add(principalName); - // log.info("principal added : "+principalClass+" "+principalName); + this.principals.add(principals); } } Index: topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java:1.4 topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java:1.5 --- topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java:1.4 Fri Sep 15 16:12:04 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java Thu Sep 21 13:22:14 2006 @@ -25,9 +25,10 @@ import static org.codelutin.topia.security.TopiaSecurityUtil.LOAD; import static org.codelutin.topia.security.TopiaSecurityUtil.UPDATE; -import java.util.Map; import java.util.Set; +import org.codelutin.topia.security.jaas.TopiaPrincipalMap; + public abstract class TopiaAuthorizationImpl extends TopiaAuthorizationAbstract implements TopiaAuthorization { @@ -38,11 +39,9 @@ * @return */ public boolean implies(TopiaAuthorization other) { - if (!impliesId(getId(), other.getId())) - return false; - if (!impliesActions(getActions(), other.getActions())) - return false; - return impliesPrincipals(getPrincipals(), other.getPrincipals()); + return impliesId(getId(), other.getId()) && + impliesActions(getActions(), other.getActions()) && + impliesPrincipals(getPrincipals(), other.getPrincipals()); } /** @@ -87,8 +86,8 @@ * @param thatPrincipals * @return */ - public boolean impliesPrincipals(Map thisPrincipals, - Map thatPrincipals) { + public boolean impliesPrincipals(TopiaPrincipalMap thisPrincipals, + TopiaPrincipalMap thatPrincipals) { // this should never happen if (thisPrincipals == null || thatPrincipals == null) @@ -100,16 +99,13 @@ } boolean result = true; - Set keySet = thisPrincipals.keySet(); - for (String thisPrincipalClass : keySet) { + for (String thisPrincipalClass : thisPrincipals.keySet()) { if ("*".equals(thisPrincipalClass)) { continue; } - Set thisPrincipalNames = (Set) thisPrincipals - .get(thisPrincipalClass); - Set thatPrincipalNames = (Set) thatPrincipals - .get(thisPrincipalClass); + Set thisPrincipalNames = thisPrincipals.get(thisPrincipalClass); + Set thatPrincipalNames = thatPrincipals.get(thisPrincipalClass); if (thatPrincipalNames != null // that contient bien le principal // nécessaire ! Index: topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java:1.3 topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java:1.4 --- topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java:1.3 Mon Sep 18 15:49:25 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java Thu Sep 21 13:22:14 2006 @@ -20,30 +20,50 @@ package org.codelutin.topia.security.entities.authorization; +import static org.codelutin.topia.security.TopiaSecurityUtil.actionsString2Int; + +import java.util.List; + +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaException; +import org.codelutin.topia.persistence.TopiaId; +import org.codelutin.topia.security.jaas.TopiaPrincipalMap; + + public class TopiaAssociationAuthorizationImpl extends TopiaAssociationAuthorizationAbstract implements TopiaAssociationAuthorization { private static final long serialVersionUID = 1L; + public TopiaAssociationAuthorizationImpl() { + principals = new TopiaPrincipalMap(); + } + public String getId() { - /*TopiaContext context = getTopiaContext(); - TopiaEntity entity = context.findByTopiaId(idBeginAssociation); - - context.find("select * from " + entity.getClass().getName() + - " where ", args)*/ - return null; + return idBeginAssociation; + } + + public boolean impliesId(String thisId, String thatId) { + String select = "count(test)"; + String from = TopiaId.getClassNameAsString(thisId) + " test join test." + nameAssociation + " as association"; + String where = "test.topiaId=? and association.topiaId=?"; + TopiaContext context = getTopiaContext(); + try { + List find = context.find("select " + select + " from " + from + " where " + where, new Object[]{thisId, thatId}); + return (Long)find.get(0) >= 1; + } catch (TopiaException e) { + e.printStackTrace(); + return false; + } } public void setActions(String actions) { - // TODO Auto-generated method stub - + this.actions = actionsString2Int(actions); } public void setPrincipals(String principals) { - // TODO Auto-generated method stub - + this.principals.add(principals); } - } Index: topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java diff -u topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java:1.2 topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java:1.3 --- topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java:1.2 Fri Sep 15 16:12:04 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java Thu Sep 21 13:22:14 2006 @@ -20,7 +20,7 @@ package org.codelutin.topia.security.entities.authorization; -import java.util.Map; +import org.codelutin.topia.security.jaas.TopiaPrincipalMap; public class TopiaLinkAuthorizationImpl extends TopiaLinkAuthorizationAbstract implements TopiaLinkAuthorization { @@ -28,11 +28,11 @@ private static final long serialVersionUID = 1L; public int getActions() { - return authorization.getActions(); + return topiaAuthorization.getActions(); } - public Map getPrincipals() { - return authorization.getPrincipals(); + public TopiaPrincipalMap getPrincipals() { + return topiaAuthorization.getPrincipals(); } }