code: private void grantRawAclEntry(String entityPath, String rawAclEntry, boolean recursive) throws NotFoundException {
  		grantNodeRawAclEntry(entityPath, rawAclEntry, false);
  
          int permissions = 0;
          permissions = PermissionUtil.setRead(permissions);
          AclEntry aclEntry = new AclEntry(AclUtil.getType(rawAclEntry), AclUtil.getName(rawAclEntry), permissions);
          
          // grant read to all parent nodes
          String pPath = entityPath;
          while(true) {
              String parentPath = StorageUtil.getParentPath(pPath);
              if (StorageUtil.isSystemPath(parentPath)) {
                  break;
              }
              grantNodeRawAclEntry(parentPath, AclUtil.encodeAclEntry(aclEntry), true);
              pPath = parentPath;
          }
  
          // recursive grant to all children
          if (recursive) {
              grantRecursiveRawAclEntry(entityPath, rawAclEntry);
          }
  
          getTemplate().save();
  	}
docs: /*
  private void grantRecursiveRawAclEntryById(String entityId, String rawAclEntry) throws NotFoundException {
  Entity[] children = storageDao.getEntityChildrenById(entityId);
  if (children.length == 0) {
  return;
  }
  
  for (Entity child : children) {
  grantNodeRawAclEntryById(child.getId(), rawAclEntry, false);
  grantRecursiveRawAclEntryById(child.getId(), rawAclEntry);
  }
  }