Skip to content

Commit 82a2ef3

Browse files
committed
Update list snappolicy & backup schedule logic to list only those that belong to a proj or for root admin those that belong to it, unless listall & projid is passed
1 parent 568178d commit 82a2ef3

File tree

4 files changed

+22
-37
lines changed

4 files changed

+22
-37
lines changed

api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupScheduleCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.apache.cloudstack.api.APICommand;
2525
import org.apache.cloudstack.api.ApiConstants;
2626
import org.apache.cloudstack.api.ApiErrorCode;
27-
import org.apache.cloudstack.api.BaseListDomainResourcesCmd;
27+
import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
2828
import org.apache.cloudstack.api.Parameter;
2929
import org.apache.cloudstack.api.ServerApiException;
3030
import org.apache.cloudstack.api.response.BackupScheduleResponse;
@@ -47,7 +47,7 @@
4747
description = "List backup schedule of a VM",
4848
responseObject = BackupScheduleResponse.class, since = "4.14.0",
4949
authorized = {RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
50-
public class ListBackupScheduleCmd extends BaseListDomainResourcesCmd {
50+
public class ListBackupScheduleCmd extends BaseListProjectAndAccountResourcesCmd {
5151

5252
@Inject
5353
BackupManager backupManager;

api/src/main/java/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotPoliciesCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
import org.apache.cloudstack.api.APICommand;
2525
import org.apache.cloudstack.api.ApiConstants;
26-
import org.apache.cloudstack.api.BaseListDomainResourcesCmd;
26+
import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
2727
import org.apache.cloudstack.api.Parameter;
2828
import org.apache.cloudstack.api.response.ListResponse;
2929
import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
@@ -34,7 +34,7 @@
3434

3535
@APICommand(name = "listSnapshotPolicies", description = "Lists snapshot policies.", responseObject = SnapshotPolicyResponse.class,
3636
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
37-
public class ListSnapshotPoliciesCmd extends BaseListDomainResourcesCmd {
37+
public class ListSnapshotPoliciesCmd extends BaseListProjectAndAccountResourcesCmd {
3838

3939

4040
/////////////////////////////////////////////////////

server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,41 +1393,32 @@ public Pair<List<? extends SnapshotPolicy>, Integer> listSnapshotPolicies(ListSn
13931393
Long volumeId = cmd.getVolumeId();
13941394
Long id = cmd.getId();
13951395
Account caller = CallContext.current().getCallingAccount();
1396-
boolean isRootAdmin = _accountMgr.isRootAdmin(caller.getId());
13971396
List<Long> permittedAccounts = new ArrayList<>();
1398-
Long domainId = null;
1399-
Boolean isRecursive = null;
1400-
ListProjectResourcesCriteria listProjectResourcesCriteria = null;
14011397

1398+
// Verify parameters
14021399
if (volumeId != null) {
14031400
VolumeVO volume = _volsDao.findById(volumeId);
14041401
if (volume != null) {
14051402
_accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, volume);
14061403
}
14071404
}
14081405

1409-
if (!isRootAdmin) {
1410-
Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject =
1411-
new Ternary<>(cmd.getDomainId(), cmd.isRecursive(), null);
1412-
_accountMgr.buildACLSearchParameters(caller, id, null, null, permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
1413-
domainId = domainIdRecursiveListProject.first();
1414-
isRecursive = domainIdRecursiveListProject.second();
1415-
listProjectResourcesCriteria = domainIdRecursiveListProject.third();
1416-
}
1406+
Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject =
1407+
new Ternary<>(cmd.getDomainId(), cmd.isRecursive(), null);
1408+
_accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
1409+
Long domainId = domainIdRecursiveListProject.first();
1410+
Boolean isRecursive = domainIdRecursiveListProject.second();
1411+
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
1412+
14171413
Filter searchFilter = new Filter(SnapshotPolicyVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal());
14181414
SearchBuilder<SnapshotPolicyVO> policySearch = _snapshotPolicyDao.createSearchBuilder();
1419-
1420-
if (!isRootAdmin) {
1421-
_accountMgr.buildACLSearchBuilder(policySearch, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
1422-
}
1415+
_accountMgr.buildACLSearchBuilder(policySearch, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
14231416

14241417
policySearch.and("id", policySearch.entity().getId(), SearchCriteria.Op.EQ);
14251418
policySearch.and("volumeId", policySearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
14261419

14271420
SearchCriteria<SnapshotPolicyVO> sc = policySearch.create();
1428-
if (!isRootAdmin) {
1429-
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
1430-
}
1421+
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
14311422

14321423
if (volumeId != null) {
14331424
sc.setParameters("volumeId", volumeId);

server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -654,31 +654,25 @@ public List<BackupSchedule> listBackupSchedules(ListBackupScheduleCmd cmd) {
654654
accountManager.checkAccess(CallContext.current().getCallingAccount(), null, true, vm);
655655
}
656656

657-
if (!isRootAdmin) {
658-
Ternary<Long, Boolean, Project.ListProjectResourcesCriteria> domainIdRecursiveListProject =
659-
new Ternary<>(cmd.getDomainId(), cmd.isRecursive(), null);
660-
accountManager.buildACLSearchParameters(caller, id, null, null, permittedAccounts, domainIdRecursiveListProject, true, false);
661-
domainId = domainIdRecursiveListProject.first();
662-
isRecursive = domainIdRecursiveListProject.second();
663-
listProjectResourcesCriteria = domainIdRecursiveListProject.third();
664-
}
657+
Ternary<Long, Boolean, Project.ListProjectResourcesCriteria> domainIdRecursiveListProject =
658+
new Ternary<>(cmd.getDomainId(), cmd.isRecursive(), null);
659+
accountManager.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, true, false);
660+
domainId = domainIdRecursiveListProject.first();
661+
isRecursive = domainIdRecursiveListProject.second();
662+
listProjectResourcesCriteria = domainIdRecursiveListProject.third();
665663

666664
Filter searchFilter = new Filter(BackupScheduleVO.class, "id", false, null, null);
667665
SearchBuilder<BackupScheduleVO> searchBuilder = backupScheduleDao.createSearchBuilder();
668666

669-
if (!isRootAdmin) {
670-
accountManager.buildACLSearchBuilder(searchBuilder, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
671-
}
667+
accountManager.buildACLSearchBuilder(searchBuilder, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
672668

673669
searchBuilder.and("id", searchBuilder.entity().getId(), SearchCriteria.Op.EQ);
674670
if (vmId != null) {
675671
searchBuilder.and("vmId", searchBuilder.entity().getVmId(), SearchCriteria.Op.EQ);
676672
}
677673

678674
SearchCriteria<BackupScheduleVO> sc = searchBuilder.create();
679-
if (!isRootAdmin) {
680-
accountManager.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
681-
}
675+
accountManager.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
682676

683677
if (id != null) {
684678
sc.setParameters("id", id);

0 commit comments

Comments
 (0)