This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.jackrabbit.usermanager-2.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-jackrabbit-usermanager.git
commit 659035542232a50509c11140804c585c5f640432 Author: Justin Edelson <[email protected]> AuthorDate: Sat Jun 19 02:11:16 2010 +0000 SLING-1557 - adding members and declaredMembers properties for groups and memberOf and declaredMemberOf properties for users and groups git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/jackrabbit-usermanager@956174 13f79535-47bb-0310-9956-ffa450edef68 --- .../impl/resource/AuthorizableValueMap.java | 55 +++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableValueMap.java b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableValueMap.java index c7ee049..1a31ca3 100644 --- a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableValueMap.java +++ b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableValueMap.java @@ -33,6 +33,7 @@ import javax.jcr.Value; import javax.jcr.ValueFormatException; import org.apache.jackrabbit.api.security.user.Authorizable; +import org.apache.jackrabbit.api.security.user.Group; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.jcr.resource.JcrResourceUtil; import org.slf4j.Logger; @@ -42,6 +43,15 @@ import org.slf4j.LoggerFactory; * ValueMap implementation for Authorizable Resources */ public class AuthorizableValueMap implements ValueMap { + + private static final String DECLARED_MEMBERS_KEY = "declaredMembers"; + + private static final String MEMBERS_KEY = "members"; + + private static final String DECLARED_MEMBER_OF_KEY = "declaredMemberOf"; + + private static final String MEMBER_OF_KEY = "memberOf"; + private Logger logger = LoggerFactory.getLogger(AuthorizableValueMap.class); private boolean fullyRead; @@ -126,7 +136,6 @@ public class AuthorizableValueMap implements ValueMap { } protected Object read(String key) { - // if the item has been completely read, we need not check // again, as we certainly will not find the key if (fullyRead) { @@ -134,6 +143,19 @@ public class AuthorizableValueMap implements ValueMap { } try { + if (key.equals(MEMBERS_KEY) && authorizable.isGroup()) { + return getMembers((Group) authorizable, true); + } + if (key.equals(DECLARED_MEMBERS_KEY) && authorizable.isGroup()) { + return getMembers((Group) authorizable, false); + } + if (key.equals(MEMBER_OF_KEY)) { + return getMemberships(authorizable, true); + } + if (key.equals(DECLARED_MEMBER_OF_KEY)) { + return getMemberships(authorizable, false); + } + if (authorizable.hasProperty(key)) { final Value[] property = authorizable.getProperty(key); final Object value = valuesToJavaObject(property); @@ -167,6 +189,13 @@ public class AuthorizableValueMap implements ValueMap { protected void readFully() { if (!fullyRead) { try { + if (authorizable.isGroup()) { + cache.put(MEMBERS_KEY, getMembers((Group) authorizable, true)); + cache.put(DECLARED_MEMBERS_KEY, getMembers((Group) authorizable, false)); + } + cache.put(MEMBER_OF_KEY, getMemberships(authorizable, true)); + cache.put(DECLARED_MEMBER_OF_KEY, getMemberships(authorizable, false)); + Iterator pi = authorizable.getPropertyNames(); while (pi.hasNext()) { String key = (String) pi.next(); @@ -319,4 +348,28 @@ public class AuthorizableValueMap implements ValueMap { return type; } + private String[] getMembers(Group group, boolean includeAll) throws RepositoryException { + List<String> results = new ArrayList<String>(); + for (Iterator<Authorizable> it = includeAll ? group.getMembers() : group.getDeclaredMembers(); + it.hasNext();) { + Authorizable auth = it.next(); + if (auth.isGroup()) { + results.add(AuthorizableResourceProvider.SYSTEM_USER_MANAGER_GROUP_PREFIX + auth.getID()); + } else { + results.add(AuthorizableResourceProvider.SYSTEM_USER_MANAGER_USER_PREFIX + auth.getID()); + } + } + return results.toArray(new String[results.size()]); + } + + private String[] getMemberships(Authorizable authorizable, boolean includeAll) throws RepositoryException { + List<String> results = new ArrayList<String>(); + for (Iterator<Group> it = includeAll ? authorizable.memberOf() : authorizable.declaredMemberOf(); + it.hasNext();) { + Group group = it.next(); + results.add(AuthorizableResourceProvider.SYSTEM_USER_MANAGER_GROUP_PREFIX + group.getID()); + } + return results.toArray(new String[results.size()]); + } + } \ No newline at end of file -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
