You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jv...@apache.org on 2009/06/22 14:10:44 UTC
svn commit: r787214 -
/sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
Author: jvazquez
Date: Mon Jun 22 12:10:43 2009
New Revision: 787214
URL: http://svn.apache.org/viewvc?rev=787214&view=rev
Log:
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.
Modified:
sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
Modified: sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java?rev=787214&r1=787213&r2=787214&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java (original)
+++ sling/trunk/bundles/jcr/jackrabbit-usermanager/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractGroupPostServlet.java Mon Jun 22 12:10:43 2009
@@ -19,13 +19,16 @@
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 @@
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 @@
+ "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 @@
}
}
+ /**
+ * 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;
+ }
+
}