in src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java [188:232]
protected Map<Principal, AccessRights> toMap(Session session, JsonObject aclJson)
throws RepositoryException {
if (aclJson == null) {
return Collections.emptyMap();
}
Map<Principal, AccessRights> map;
AccessControlManager acm = session.getAccessControlManager();
PrincipalManager principalManager = AccessControlUtil.getPrincipalManager(session);
Function<? super JsonValue, ? extends Principal> keyMapper = val -> {
String principalId = ((JsonObject)val).getString(JsonConvert.KEY_PRINCIPAL);
return principalManager.getPrincipal(principalId);
};
Function<? super JsonValue, ? extends AccessRights> valueMapper = val -> {
AccessRights rights = new AccessRights();
JsonObject privilegesObj = ((JsonObject)val).getJsonObject(JsonConvert.KEY_PRIVILEGES);
if (privilegesObj != null) {
privilegesObj.entrySet().stream()
.forEach(entry -> {
Privilege privilege = null;
try {
privilege = acm.privilegeFromName(entry.getKey());
} catch (RepositoryException e) {
logger.warn("Failed to resolve privilege", e);
}
if (privilege != null) {
JsonValue value = entry.getValue();
if (value instanceof JsonObject) {
JsonObject privilegeObj = (JsonObject)value;
if (privilegeObj.containsKey(JsonConvert.KEY_ALLOW)) {
rights.granted.add(privilege);
}
if (privilegeObj.containsKey(JsonConvert.KEY_DENY)) {
rights.denied.add(privilege);
}
}
}
});
}
return rights;
};
map = aclJson.values().stream()
.collect(Collectors.toMap(keyMapper, valueMapper));
return map;
}