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 <[email protected]> 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 "[email protected]" <[email protected]>.
