Gilad Chaplik has uploaded a new change for review. Change subject: core: extend DiskProfile.getAllForStorageDomain to a user query ......................................................................
core: extend DiskProfile.getAllForStorageDomain to a user query getAllForStorageDomain is extended to a user query, which will be consumed by the user portal as well. In terms of MLA hierarchy, Disk profile is a under Storage Domain (SD), so all the disk profiles attached to the SD will return if user has permission to the SD, i.e. for we rely on SD permissions (with no change from current flow). Change-Id: I3bb75728cd76bba7e39de2314275f5bc87942c6b Signed-off-by: Gilad Chaplik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/GetDiskProfilesByStorageDomainIdQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java M packaging/dbscripts/disk_profiles_sp.sql 6 files changed, 43 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/31816/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/GetDiskProfilesByStorageDomainIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/GetDiskProfilesByStorageDomainIdQuery.java index 32ef1bd..0550de7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/GetDiskProfilesByStorageDomainIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/profiles/GetDiskProfilesByStorageDomainIdQuery.java @@ -12,7 +12,7 @@ @Override protected void executeQueryCommand() { getQueryReturnValue().setReturnValue(getDbFacade().getDiskProfileDao() - .getAllForStorageDomain(getParameters().getId())); + .getAllForStorageDomain(getParameters().getId(), getUserID(), getParameters().isFiltered())); } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 059791a..76a1994 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -367,7 +367,7 @@ //Disk Profiles GetDiskProfileById, GetAllDiskProfiles, - GetDiskProfilesByStorageDomainId, + GetDiskProfilesByStorageDomainId(VdcQueryAuthType.User), GetDiskProfilesByStorageQosId, // Default type instead of having to null check diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java index 5af755c..34ebe0b 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDao.java @@ -27,4 +27,17 @@ */ void nullifyQosForStorageDomain(Guid storageDomainId); + /** + * Retrieves all disk profiles associated with the given storage domain id, according user's permissions. + * + * @param storageDomainId + * the storage domain's ID + * @param userId + * the user's ID + * @param isFiltered + * indicating whether the results should be filtered according to the user's permissions + * @return the list of disk profiles + */ + List<DiskProfile> getAllForStorageDomain(Guid storageDomainId, Guid userId, boolean isFiltered); + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java index 6eb3e50..e067377 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoDbFacadeImpl.java @@ -18,9 +18,16 @@ @Override public List<DiskProfile> getAllForStorageDomain(Guid storageDomainId) { + return getAllForStorageDomain(storageDomainId, null, false); + } + + @Override + public List<DiskProfile> getAllForStorageDomain(Guid storageDomainId, Guid userId, boolean isFiltered) { return getCallsHandler().executeReadList("GetDiskProfilesByStorageDomainId", createEntityRowMapper(), - getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId)); + getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId) + .addValue("user_id", userId) + .addValue("is_filtered", isFiltered)); } @Override diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java index 5e04c3c..adc2f64 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/profiles/DiskProfileDaoTest.java @@ -68,8 +68,10 @@ */ @Test public void testGetAllForStorageDomainFull() { - List<DiskProfile> result = dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5); + checkResults(dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5)); + } + private void checkResults(List<DiskProfile> result) { assertNotNull(result); assertEquals(2, result.size()); for (DiskProfile diskProfile : result) { @@ -154,4 +156,16 @@ assertEquals(FixturesTool.QOS_ID_1, diskProfile.getQosId()); } } + + @Test + public void testGetFilteredByPermissions() { + checkResults(dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5, PRIVILEGED_USER_ID, true)); + } + + @Test + public void testGetFilteredByPermissionsForUnprivilegedUser() { + List<DiskProfile> result = + dao.getAllForStorageDomain(FixturesTool.STORAGE_DOAMIN_SCALE_SD5, UNPRIVILEGED_USER_ID, true); + assertTrue(result.isEmpty()); + } } diff --git a/packaging/dbscripts/disk_profiles_sp.sql b/packaging/dbscripts/disk_profiles_sp.sql index aedf748..59331ec 100644 --- a/packaging/dbscripts/disk_profiles_sp.sql +++ b/packaging/dbscripts/disk_profiles_sp.sql @@ -78,14 +78,17 @@ LANGUAGE plpgsql; -Create or replace FUNCTION GetDiskProfilesByStorageDomainId(v_storage_domain_id UUID) +Create or replace FUNCTION GetDiskProfilesByStorageDomainId(v_storage_domain_id UUID, v_user_id UUID, v_is_filtered boolean) RETURNS SETOF disk_profiles STABLE AS $procedure$ BEGIN RETURN QUERY SELECT * FROM disk_profiles - WHERE storage_domain_id = v_storage_domain_id; + WHERE storage_domain_id = v_storage_domain_id + AND (NOT v_is_filtered OR EXISTS (SELECT 1 + FROM user_storage_domain_permissions_view + WHERE user_id = v_user_id AND entity_id = v_storage_domain_id)); END; $procedure$ LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/31816 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3bb75728cd76bba7e39de2314275f5bc87942c6b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
