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:16 UTC

[sling-org-apache-sling-jcr-jackrabbit-usermanager] 16/28: SLING-1016: Make membership management depend on the principal name not the URI of the principal, since the principal name is already unique. https://issues.apache.org/jira/browse/SLING-1016 Patch provided by Ian Boston.

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.0.4
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-jackrabbit-usermanager.git

commit 8048a2b2f61f3f31c44591d78f3592539b762e5c
Author: Juan Vazquez <jv...@apache.org>
AuthorDate: Mon Jun 22 12:10:43 2009 +0000

    SLING-1016: Make membership management depend on the principal name not the URI of the principal, since the principal name is already unique.
    https://issues.apache.org/jira/browse/SLING-1016
    Patch provided by Ian Boston.
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/jackrabbit-usermanager@787214 13f79535-47bb-0310-9956-ffa450edef68
---
 .../impl/post/AbstractGroupPostServlet.java        | 52 ++++++++++++++++------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
index d70cb24..57b9dc3 100644
--- a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
+++ b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
@@ -19,13 +19,16 @@ package org.apache.sling.jackrabbit.usermanager.impl.post;
 import java.util.List;
 
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
+import org.apache.sling.jcr.base.util.AccessControlUtil;
 import org.apache.sling.servlets.post.Modification;
 import org.apache.sling.servlets.post.SlingPostConstants;
 
@@ -56,19 +59,19 @@ public abstract class AbstractGroupPostServlet extends
             ResourceResolver resolver = request.getResourceResolver();
             Resource baseResource = request.getResource();
             boolean changed = false;
+            
+            UserManager userManager = AccessControlUtil.getUserManager(resolver.adaptTo(Session.class));
 
             // first remove any members posted as ":member@Delete"
             String[] membersToDelete = request.getParameterValues(SlingPostConstants.RP_PREFIX
                 + "member" + SlingPostConstants.SUFFIX_DELETE);
             if (membersToDelete != null) {
                 for (String member : membersToDelete) {
-                    Resource res = resolver.getResource(baseResource, member);
-                    if (res != null) {
-                        Authorizable memberAuthorizable = res.adaptTo(Authorizable.class);
-                        if (memberAuthorizable != null) {
-                            group.removeMember(memberAuthorizable);
-                            changed = true;
-                        }
+                    
+                    Authorizable memberAuthorizable = getAuthorizable(baseResource, member,userManager,resolver);
+                    if (memberAuthorizable != null) {
+                        group.removeMember(memberAuthorizable);
+                        changed = true;
                     }
 
                 }
@@ -79,13 +82,10 @@ public abstract class AbstractGroupPostServlet extends
                 + "member");
             if (membersToAdd != null) {
                 for (String member : membersToAdd) {
-                    Resource res = resolver.getResource(baseResource, member);
-                    if (res != null) {
-                        Authorizable memberAuthorizable = res.adaptTo(Authorizable.class);
-                        if (memberAuthorizable != null) {
-                            group.addMember(memberAuthorizable);
-                            changed = true;
-                        }
+                    Authorizable memberAuthorizable = getAuthorizable(baseResource, member,userManager,resolver);
+                    if (memberAuthorizable != null) {
+                        group.addMember(memberAuthorizable);
+                        changed = true;
                     }
                 }
             }
@@ -98,4 +98,28 @@ public abstract class AbstractGroupPostServlet extends
         }
     }
 
+    /**
+     * Gets the member, assuming its a principal name, failing that it assumes it a path to the resource.
+     * @param member the token pointing to the member, either a name or a uri
+     * @param userManager the user manager for this request.
+     * @param resolver the resource resolver for this request.
+     * @return the authorizable, or null if no authorizable was found.
+     */
+    private Authorizable getAuthorizable(Resource baseResource, String member, UserManager userManager,
+        ResourceResolver resolver) {
+      Authorizable memberAuthorizable = null;
+      try {
+        memberAuthorizable = userManager.getAuthorizable(member);
+      } catch (RepositoryException e) {
+        // if we can't find the members then it may be resolvable as a resource.
+      }
+      if ( memberAuthorizable == null ) {
+          Resource res = resolver.getResource(baseResource, member);
+          if (res != null) {
+              memberAuthorizable = res.adaptTo(Authorizable.class);
+          }
+      }
+      return memberAuthorizable;
+    }
+
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.