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.2 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.2 Thu Sep 14 13:41:59 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaEntityAuthorizationImpl.java Fri Sep 15 16:12:04 2006 @@ -20,12 +20,11 @@ package org.codelutin.topia.security.entities.authorization; -import static org.codelutin.topia.security.TopiaSecurityUtil.*; +import static org.codelutin.topia.security.TopiaSecurityUtil.actionsString2Int; import java.security.Principal; import java.util.HashMap; import java.util.HashSet; -import java.util.Map; import java.util.Set; import java.util.StringTokenizer; @@ -40,9 +39,9 @@ principals = new HashMap>(); } - public TopiaEntityAuthorizationImpl(String id, String actions, Set principals) { + public TopiaEntityAuthorizationImpl(String id, int actions, Set principals) { this.id = id; - this.actions = actionsString2Int(actions); + this.actions = actions; this.principals = new HashMap>(); for (Principal principal : principals) { addPrincipal(principal.getClass().getName(), principal.getName()); @@ -62,92 +61,6 @@ } } - public boolean implies(TopiaEntityAuthorization other) { - if (!impliesId(getId(), other.getId())) - return false; - if (!impliesActions(actions, other.getActions())) - return false; - return impliesPrincipal(principals, other.getPrincipals()); - } - - /** - * @param thisId - * un id - * @param thatId - * un autre Id - * @return vrai si les ids sont egaux - */ - private boolean impliesId(String thisId, String thatId) { - return (thisId.equals(thatId) || - "*".equals(thisId) || - (thatId.startsWith(thisId.substring(0, thisId.length()-1)) - && thisId.endsWith("#*"))); - } - - /** - * @param thisActions - * @param thatActions - * @return vrai si thisActions implique thatActions. C'est à dire que pour - * chaque action de that, this la contient également - */ - private boolean impliesActions(int thisActions, int thatActions) { - boolean result = true; - if ((thatActions & LOAD) == LOAD) { - result &= ((thisActions & LOAD) == LOAD); - } - if ((thatActions & CREATE) == CREATE) { - result &= ((thisActions & CREATE) == CREATE); - } - if ((thatActions & UPDATE) == UPDATE) { - result &= ((thisActions & UPDATE) == UPDATE); - } - if ((thatActions & DELETE) == DELETE) { - result &= ((thisActions & DELETE) == DELETE); - } - return result; - } - - /** - * @param thisPrincipals - * @param thatPrincipals - * @return vrai si thisPrincipals implique thatPrincipals. - */ - private boolean impliesPrincipal(Map> thisPrincipals, - Map> thatPrincipals) { - // this should never happen - if (thisPrincipals == null || thatPrincipals == null) - return false; - - if (thisPrincipals.size() == 0 || thatPrincipals.size() == 0) { - //FIXME Verifier ce test !!!!! - return true; - } - - boolean result = true; - for (String thisPrincipalClass : thisPrincipals.keySet()) { - if ("*".equals(thisPrincipalClass)) { - continue; - } - - Set thisPrincipalNames = thisPrincipals - .get(thisPrincipalClass); - Set thatPrincipalNames = thatPrincipals - .get(thisPrincipalClass); - - if (thatPrincipalNames != null // that contient bien le principal - // nécessaire ! - && (thisPrincipalNames.contains("*") || thatPrincipalNames - .containsAll(thisPrincipalNames))) { - // (this contient une étoile (accepte tous)) ou (that contient - // tout ce que contient this) - continue; - } - - result = false; - } - return result; - } - protected void addPrincipal(String principalClass, String principalName) { Set names = (Set) principals.get(principalClass); if (names == null) { 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.3 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.3 Fri Sep 15 13:01:49 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAuthorizationImpl.java Fri Sep 15 16:12:04 2006 @@ -20,43 +20,108 @@ package org.codelutin.topia.security.entities.authorization; +import static org.codelutin.topia.security.TopiaSecurityUtil.CREATE; +import static org.codelutin.topia.security.TopiaSecurityUtil.DELETE; +import static org.codelutin.topia.security.TopiaSecurityUtil.LOAD; +import static org.codelutin.topia.security.TopiaSecurityUtil.UPDATE; + +import java.util.Map; +import java.util.Set; + public abstract class TopiaAuthorizationImpl extends TopiaAuthorizationAbstract implements TopiaAuthorization { - - public String getActionsAsString() { - // TODO Auto-generated method stub - return null; - } - public String getId() { - // TODO Auto-generated method stub - return null; - } - - public boolean implies(TopiaAuthorization entityAuthorization) { - if(entityAuthorization instanceof TopiaEntityAuthorization) { - return implies((TopiaEntityAuthorization) entityAuthorization); + /** + * + * @param other + * @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()); + } + + /** + * + * @param thisId + * @param thatId + * @return + */ + public boolean impliesId(String thisId, String thatId) { + return (thisId.equals(thatId) || + "*".equals(thisId) || + (thatId.startsWith(thisId.substring(0, thisId.length()-1)) + && thisId.endsWith("#*"))); + } + + /** + * + * @param thisActions + * @param thatActions + * @return + */ + public boolean impliesActions(int thisActions, int thatActions) { + boolean result = true; + if ((thatActions & LOAD) == LOAD) { + result &= ((thisActions & LOAD) == LOAD); + } + if ((thatActions & CREATE) == CREATE) { + result &= ((thisActions & CREATE) == CREATE); } - if(entityAuthorization instanceof TopiaLinkAuthorization) { - return implies((TopiaLinkAuthorization) entityAuthorization); + if ((thatActions & UPDATE) == UPDATE) { + result &= ((thisActions & UPDATE) == UPDATE); } - if(entityAuthorization instanceof TopiaAssociationAuthorization) { - return implies((TopiaAssociationAuthorization) entityAuthorization); + if ((thatActions & DELETE) == DELETE) { + result &= ((thisActions & DELETE) == DELETE); } - return false; + return result; } - public boolean implies(TopiaEntityAuthorization entityAuthorization) { - throw new UnsupportedOperationException(); - } + /** + * + * @param thisPrincipals + * @param thatPrincipals + * @return + */ + public boolean impliesPrincipals(Map thisPrincipals, + Map thatPrincipals) { + + // this should never happen + if (thisPrincipals == null || thatPrincipals == null) + return false; + + if (thisPrincipals.size() == 0 || thatPrincipals.size() == 0) { + //FIXME Verifier ce test !!!!! + return true; + } - public boolean implies(TopiaLinkAuthorization entityAuthorization) { - throw new UnsupportedOperationException(); - } + boolean result = true; + Set keySet = thisPrincipals.keySet(); + for (String thisPrincipalClass : keySet) { + if ("*".equals(thisPrincipalClass)) { + continue; + } + + Set thisPrincipalNames = (Set) thisPrincipals + .get(thisPrincipalClass); + Set thatPrincipalNames = (Set) thatPrincipals + .get(thisPrincipalClass); + + if (thatPrincipalNames != null // that contient bien le principal + // nécessaire ! + && (thisPrincipalNames.contains("*") || thatPrincipalNames + .containsAll(thisPrincipalNames))) { + // (this contient une étoile (accepte tous)) ou (that contient + // tout ce que contient this) + continue; + } - public boolean implies(TopiaAssociationAuthorization entityAuthorization) { - throw new UnsupportedOperationException(); + result = false; + } + return result; } - } 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.1 topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java:1.2 --- topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java:1.1 Thu Sep 14 13:41:59 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaAssociationAuthorizationImpl.java Fri Sep 15 16:12:04 2006 @@ -26,9 +26,20 @@ private static final long serialVersionUID = 1L; - public boolean implies(TopiaEntityAuthorization entityAuthorization) { + public String getId() { // TODO Auto-generated method stub - return false; + return null; } + public void setActions(String actions) { + // TODO Auto-generated method stub + + } + + public void setPrincipals(String principals) { + // TODO Auto-generated method stub + + } + + } 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.1 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.1 Thu Sep 14 13:41:59 2006 +++ topia-security/src/java/org/codelutin/topia/security/entities/authorization/TopiaLinkAuthorizationImpl.java Fri Sep 15 16:12:04 2006 @@ -20,13 +20,19 @@ package org.codelutin.topia.security.entities.authorization; +import java.util.Map; + public class TopiaLinkAuthorizationImpl extends TopiaLinkAuthorizationAbstract implements TopiaLinkAuthorization { private static final long serialVersionUID = 1L; - public boolean implies(TopiaEntityAuthorization entityAuthorization) { - return false; + public int getActions() { + return authorization.getActions(); + } + + public Map getPrincipals() { + return authorization.getPrincipals(); } }