protected boolean canDeleteMultiTenantEntry(String entryId) { if (isMultiTenant()) { // can only delete entry from the current tenant String tenantId = getCurrentTenantId(); if (StringUtils.isNotBlank(tenantId)) { DocumentModel entry = getEntry(entryId); String entryTenantId = (String) entry.getProperty(schemaName, TENANT_ID_FIELD); if (StringUtils.isBlank(entryTenantId) || !entryTenantId.equals(tenantId)) { if (log.isDebugEnabled()) { log.debug(String.format("Trying to delete entry '%s' not part of current tenant '%s'", entryId, tenantId)); } return false; } } } return true; }
/** * Adds the tenant id to the query if needed. * * @since 10.3 */ protected QueryBuilder addTenantId(QueryBuilder queryBuilder) { if (!isMultiTenant()) { return queryBuilder; } String tenantId = getCurrentTenantId(); if (StringUtils.isEmpty(tenantId)) { return queryBuilder; } // predicate to add Predicate predicate = Predicates.eq(TENANT_ID_FIELD, tenantId); // add to query queryBuilder = new QueryBuilder(queryBuilder); // copy MultiExpression multiExpression = queryBuilder.predicate(); if (multiExpression.predicates.isEmpty()) { queryBuilder.predicate(predicate); } else if (multiExpression.operator == Operator.AND || multiExpression.predicates.size() == 1) { queryBuilder.and(predicate); } else { // query is an OR multiexpression queryBuilder.filter( new MultiExpression(Operator.AND, new ArrayList<>(Arrays.asList(predicate, multiExpression)))); } return queryBuilder; }