in src/main/java/org/apache/sling/jackrabbit/usermanager/impl/resource/AuthorizableResourceProvider.java [295:353]
public Iterator<Resource> listChildren(ResolveContext<Object> ctx, Resource parent) {
try {
String path = parent.getPath();
// handle children of /system/userManager
if (systemUserManagerPath.equals(path)) {
List<Resource> resources = new ArrayList<>();
resources.add(getResource(ctx,
systemUserManagerUserPath, null, null));
resources.add(getResource(ctx,
systemUserManagerGroupPath, null, null));
return resources.iterator();
}
int searchType = -1;
if (systemUserManagerUserPath.equals(path)) {
searchType = PrincipalManager.SEARCH_TYPE_NOT_GROUP;
} else if (systemUserManagerGroupPath.equals(path)) {
searchType = PrincipalManager.SEARCH_TYPE_GROUP;
}
if (searchType != -1) {
PrincipalIterator principals = null;
ResourceResolver resourceResolver = parent.getResourceResolver();
Session session = resourceResolver.adaptTo(Session.class);
if (session != null) {
PrincipalManager principalManager = AccessControlUtil.getPrincipalManager(session);
principals = principalManager.getPrincipals(searchType);
}
if (principals != null) {
return new ChildrenIterator(parent, principals);
}
} else if (resourcesForNestedProperties) {
// handle nested property containers
AuthorizableWorker<Iterator<Resource>> authorizableWorker = (authorizable, relPath) -> {
Iterator<Resource> result = null;
Resource r = ctx.getResourceResolver().resolve(authorizable.getPath());
if (relPath != null) {
r = r.getChild(relPath);
}
if (r != null) {
// only include the children that are nested property containers
List<Resource> propContainers = filterPropertyContainers(relPath, authorizable, r);
if (!propContainers.isEmpty()) {
result = new NestedChildrenIterator(parent, authorizable.getID(), r.getChildren().iterator());
}
}
return result;
};
return maybeDoAuthorizableWork(ctx, path, authorizableWorker, null);
}
} catch (RepositoryException re) {
throw new SlingException("Error listing children of resource: "
+ parent.getPath(), re);
}
return null;
}