Author: bpoussin Date: 2010-06-10 17:21:25 +0200 (Thu, 10 Jun 2010) New Revision: 113 Url: http://nuiton.org/repositories/revision/wikitty/113 Log: - gestion des AppAdmin - gestion de "l'heritage" entre autorisation Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java trunk/wikitty-api/src/main/uml/wikitty-api/wikitty-security.zargo Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-06-10 15:17:47 UTC (rev 112) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-06-10 15:21:25 UTC (rev 113) @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.wikitty.search.Search; /** * @@ -40,6 +41,8 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceSecurity.class); + static final public String WIKITTY_APPADMIN_GROUP_NAME = "WikittyAppAdmin"; + protected WikittyService ws; public WikittyServiceSecurity(WikittyService ws) { @@ -96,8 +99,7 @@ // recuperation de l'utilisateur associe au securityToken Wikitty securityTokenWikitty = ws.restore(securityToken, securityToken); - String userId = securityTokenWikitty.getFieldAsWikitty( - SecurityToken.EXT_SECURITYTOKEN, SecurityToken.FIELD_USER); + String userId = SecurityTokenHelper.getUser(securityTokenWikitty); // on ajoute et on fixe les droits par defaut WikittyAuthorisation auth = new WikittyAuthorisationImpl(wikitty); @@ -169,8 +171,7 @@ public boolean canRead(String securityToken, String wikittyId) { // recuperation de l'utilisateur associe au securityToken Wikitty securityTokenWikitty = ws.restore(securityToken, securityToken); - String userId = securityTokenWikitty.getFieldAsWikitty( - SecurityToken.EXT_SECURITYTOKEN, SecurityToken.FIELD_USER); + String userId = SecurityTokenHelper.getUser(securityTokenWikitty); // // check security @@ -434,8 +435,7 @@ // recuperation de l'utilisateur associe au securityToken Wikitty securityTokenWikitty = ws.restore(securityToken, securityToken); if (securityTokenWikitty != null) { - result = securityTokenWikitty.getFieldAsWikitty( - SecurityToken.EXT_SECURITYTOKEN, SecurityToken.FIELD_USER); + result = SecurityTokenHelper.getUser(securityTokenWikitty); } return result; } @@ -450,10 +450,8 @@ */ protected boolean isOwner(String userId, Wikitty w) { boolean result = false; - if (w.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION)) { - String owner = w.getFieldAsWikitty( - WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, - WikittyAuthorisation.FIELD_OWNER); + if (WikittyAuthorisationHelper.isExtension(w)) { + String owner = WikittyAuthorisationHelper.getOwner(w); result = userId.equals(owner); } return result; @@ -496,18 +494,26 @@ */ protected boolean isReader(String userId, Wikitty w) { boolean result = true; - if (w.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION)) { - Set<String> groupOrUser = w.getFieldAsSet( - WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, - WikittyAuthorisation.FIELD_READER, - String.class); - if (!(groupOrUser == null || groupOrUser.size() == 0)) { + if (WikittyAuthorisationHelper.isExtension(w)) { + Set<String> groupOrUser = WikittyAuthorisationHelper.getReader(w); + if (groupOrUser == null || groupOrUser.size() == 0) { + // il n'y a pas de reader sur l'objet actuel, il faut regarder + // sur le parent s'il y en a + String parentId = WikittyAuthorisationHelper.getParent(w); + if (parentId != null) { + Wikitty parent = ws.restore(null, parentId); + result = isReader(userId, parent); + } + } else { + // il y a des readers sur l'objet actuel, il faut donc checker + // comme pour les autres droits en parent aussi les parents result = isMember(userId, w, WikittyAuthorisation.FIELD_READER); } } return result; } + transient protected String appAdminGroupId = null; /** * Verifie si l'utilisateur est considere comme un AppAdmin * @@ -515,8 +521,30 @@ * @return */ protected boolean isAppAdmin(String userId) { - // TODO poussin 20100607 verifier que l'utilisateur est un AppAdmin ou non - return false; + Wikitty group; + if (appAdminGroupId == null) { + // 1er fois, on le recherche + group = ws.findByCriteria(userId, Search.query().eq( + WikittyGroup.FQ_FIELD_NAME, WIKITTY_APPADMIN_GROUP_NAME).criteria()); + // group peut-etre null s'il n'existe pas + } else { + // on a deja fait la recherche precedement, on essaie de reutilise + // le meme id + group = ws.restore(userId, appAdminGroupId); + // group peut-etre null, si entre temps un admin a supprime le group + } + if (group == null) { + // il n'existe pas on le cree. + WikittyGroup appAdminGroup = new WikittyGroupImpl(); + appAdminGroup.setName(WIKITTY_APPADMIN_GROUP_NAME); + } + // on garde l'id pour ne plus faire la recherche, + // vu que le groupe doit etre unique cela ne pose pas de probleme + appAdminGroupId = group.getId(); + + Set<String> ids = WikittyGroupHelper.getMembers(group); + boolean result = isMember(userId, ids); + return result; } /** @@ -530,12 +558,20 @@ */ protected boolean isMember(String userId, Wikitty w, String field) { boolean result = false; - if (w.hasExtension(WikittyAuthorisation.EXT_WIKITTYAUTHORISATION)) { + if (WikittyAuthorisationHelper.isExtension(w)) { Set<String> groupOrUser = w.getFieldAsSet( WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, field, String.class); result = isMember(userId, groupOrUser); + if (!result) { + // user don't have right on current object, check parent right + String parentId = WikittyAuthorisationHelper.getParent(w); + if (parentId != null) { + Wikitty parent = ws.restore(null, parentId); + result = isMember(userId, parent, field); + } + } } return result; } @@ -554,10 +590,8 @@ return true; } else { Wikitty w = ws.restore(null, id); - if (w.hasExtension(WikittyGroup.EXT_WIKITTYGROUP)) { - Set<String> members = w.getFieldAsSet( - WikittyGroup.EXT_WIKITTYGROUP, - WikittyGroup.FIELD_MEMBERS, String.class); + if (WikittyGroupHelper.isExtension(w)) { + Set<String> members =WikittyGroupHelper.getMembers(w); if (isMember(userId, members)) { return true; } Modified: trunk/wikitty-api/src/main/uml/wikitty-api/wikitty-security.zargo =================================================================== (Binary files differ)
participants (1)
-
bpoussin@users.nuiton.org