diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/AppsmithRepository.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/AppsmithRepository.java index ddfacd4506..63014c3895 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/AppsmithRepository.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/AppsmithRepository.java @@ -5,10 +5,7 @@ import com.appsmith.server.acl.AclPermission; import com.appsmith.server.repositories.ce.params.QueryAllParams; import com.mongodb.bulk.BulkWriteResult; import com.mongodb.client.result.InsertManyResult; -import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Update; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.List; @@ -25,14 +22,6 @@ public interface AppsmithRepository { QueryAllParams queryBuilder(); - Flux queryAllWithStrictPermissionGroups( - List criterias, - Optional> includeFields, - Optional permission, - Sort sort, - int limit, - int skip); - Mono setUserPermissionsInObject(T obj, Set permissionGroups); Mono setUserPermissionsInObject(T obj); diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java index 71cc5ac8bd..650f6dea29 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/BaseAppsmithRepositoryCEImpl.java @@ -313,62 +313,31 @@ public abstract class BaseAppsmithRepositoryCEImpl { List projectionFieldNames, Set permissionGroups, AclPermission aclPermission) { - Query query = new Query(); - criterias.stream().forEach(criteria -> query.addCriteria(criteria)); - if (aclPermission == null) { - query.addCriteria(new Criteria().andOperator(notDeleted())); - } else { - query.addCriteria(new Criteria().andOperator(notDeleted(), userAcl(permissionGroups, aclPermission))); + final ArrayList criteriaList = new ArrayList<>(criterias); + criteriaList.add(notDeleted()); + + final Criteria permissionCriteria = userAcl(permissionGroups, aclPermission); + if (permissionCriteria != null) { + criteriaList.add(permissionCriteria); } + final Query query = new Query(new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))); + if (!isEmpty(projectionFieldNames)) { - projectionFieldNames.stream().forEach(fieldName -> query.fields().include(fieldName)); + query.fields().include(projectionFieldNames.toArray(new String[0])); } return query; } - public Flux queryAllWithStrictPermissionGroups( - List criterias, - Optional> includeFields, - Optional permission, - Sort sort, - int limit, - int skip) { - Mono> permissionGroupsMono = ReactiveSecurityContextHolder.getContext() - .map(ctx -> ctx.getAuthentication()) - .map(auth -> auth.getPrincipal()) - .flatMap(principal -> getStrictPermissionGroupsForUser((User) principal)); - return permissionGroupsMono.flatMapMany(permissionGroups -> queryBuilder() - .criteria(criterias) - .fields(includeFields.orElse(null)) - .permission(permission.orElse(null)) - .permissionGroups(permissionGroups) - .sort(sort) - .limit(limit) - .skip(skip) - .all()); - } - public QueryAllParams queryBuilder() { return new QueryAllParams<>(this); } public Flux queryAllExecute(QueryAllParams params) { return tryGetPermissionGroups(params).flatMapMany(permissionGroups -> { - final ArrayList criteriaList = new ArrayList<>(params.getCriteria()); - criteriaList.add(notDeleted()); - - final Criteria permissionCriteria = userAcl(permissionGroups, params.getPermission()); - if (permissionCriteria != null) { - criteriaList.add(permissionCriteria); - } - - final Query query = new Query(new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))); - - if (!CollectionUtils.isEmpty(params.getFields())) { - query.fields().include(params.getFields().toArray(new String[0])); - } + final Query query = createQueryWithPermission( + params.getCriteria(), params.getFields(), permissionGroups, params.getPermission()); if (params.getSkip() > NO_SKIP) { query.skip(params.getSkip());