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

Reply via email to