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>.