private boolean checkGrantHierarchy(String objectName, UserSession userSession, AccessMode objectMode) throws JasDBStorageException {
String userName = userSession.getUser().getUsername();
LOG.debug("Checking grant hierarchy for: {} for user: {}", objectName, userName);
StringBuilder currentPath = new StringBuilder();
currentPath.append(Constants.OBJECT_SEPARATOR);
AccessMode grantedMode = getGrantedMode(currentPath.toString(), userSession);
LOG.debug("Root access mode: {} for user: {}", grantedMode, userName);
grantedMode = grantedMode == null ? AccessMode.NONE : grantedMode;
String[] pathElements = objectName.replaceFirst(Constants.OBJECT_SEPARATOR, "").split(Constants.OBJECT_SEPARATOR);
for(String pathElement : pathElements) {
currentPath.append(pathElement);
AccessMode mode = getGrantedMode(currentPath.toString(), userSession);
if(mode != null) {
grantedMode = mode;
if(mode == AccessMode.NONE) {
break;
}
}
currentPath.append(Constants.OBJECT_SEPARATOR);
}
LOG.debug("Grant level: {} for path: {}", grantedMode, currentPath.toString());
boolean granted = grantedMode != null ? grantedMode.getRank() >= objectMode.getRank() : false;
return granted;
}