You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:48:40 UTC

[sling-org-apache-sling-jcr-jackrabbit-usermanager] 11/24: SLING-1557 - adding members and declaredMembers properties for groups and memberOf and declaredMemberOf properties for users and groups

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 <ju...@apache.org>
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
"commits@sling.apache.org" <co...@sling.apache.org>.