From 11eac09c129d60ff83b1a340f0c6abc5230365b7 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 21 Jun 2023 14:08:19 +0200 Subject: [PATCH 1/2] include all files when project selected not just for admins --- .../src/main/java/com/cloud/api/query/QueryManagerImpl.java | 6 +++--- server/src/main/java/com/cloud/user/AccountManagerImpl.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 0968af0e7c0e..5aad6afcdbb3 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -991,14 +991,14 @@ private Object getObjectPossibleMethodValue(Object obj, String methodName) { private Pair, Integer> searchForUserVMsInternal(ListVMsCmd cmd) { Account caller = CallContext.current().getCallingAccount(); - List permittedAccounts = new ArrayList(); + List permittedAccounts = new ArrayList<>(); boolean listAll = cmd.listAll(); Long id = cmd.getId(); Long userId = cmd.getUserId(); Map tags = cmd.getTags(); Boolean display = cmd.getDisplay(); - Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); + Ternary domainIdRecursiveListProject = new Ternary<>(cmd.getDomainId(), cmd.isRecursive(), null); _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); @@ -1011,7 +1011,7 @@ private Pair, Integer> searchForUserVMsInternal(ListVMsCmd cm if (cmd.getIds() != null && !cmd.getIds().isEmpty()) { throw new InvalidParameterValueException("Specify either id or ids but not both parameters"); } - ids = new ArrayList(); + ids = new ArrayList<>(); ids.add(cmd.getId()); } else { ids = cmd.getIds(); diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index 62a84d0d9bfe..8f5eefbba9da 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -2957,9 +2957,6 @@ public void buildACLSearchParameters(Account caller, Long id, String accountName if (projectId == -1L) { if (caller.getType() == Account.Type.ADMIN) { domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly); - if (listAll) { - domainIdRecursiveListProject.third(ListProjectResourcesCriteria.ListAllIncludingProjectResources); - } } else { permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); // permittedAccounts can be empty when the caller is not a part of any project (a domain account) @@ -2967,6 +2964,9 @@ public void buildACLSearchParameters(Account caller, Long id, String accountName permittedAccounts.add(caller.getId()); } } + if (listAll) { + domainIdRecursiveListProject.third(ListProjectResourcesCriteria.ListAllIncludingProjectResources); + } } else { Project project = _projectMgr.getProject(projectId); if (project == null) { From 9a804ee64b3898b49e69fce4c816329f063f5074 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 31 Jul 2023 08:48:37 +0200 Subject: [PATCH 2/2] add the caller account id when seraching for all and projects --- .../src/main/java/com/cloud/user/AccountManagerImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java index 8f5eefbba9da..38b2eddeb60a 100644 --- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java +++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java @@ -2955,12 +2955,11 @@ public void buildACLSearchParameters(Account caller, Long id, String accountName if (projectId != null) { if (!forProjectInvitation) { if (projectId == -1L) { - if (caller.getType() == Account.Type.ADMIN) { - domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly); - } else { + domainIdRecursiveListProject.third(Project.ListProjectResourcesCriteria.ListProjectResourcesOnly); + if (caller.getType() != Account.Type.ADMIN) { permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); // permittedAccounts can be empty when the caller is not a part of any project (a domain account) - if (permittedAccounts.isEmpty()) { + if (permittedAccounts.isEmpty() || listAll) { permittedAccounts.add(caller.getId()); } }