Shubhendu Tripathi has uploaded a new change for review.

Change subject: gluster: Added app_mode field to roles table
......................................................................

gluster: Added app_mode field to roles table

Added a field app_mode to roles table. This field maintains the details
of the application mode for which the said role is meant for.

This detail would be used for rendering the list of roles as per the
application mode. This would avoid deletion of unwanted roles in case of
gluster downstream.

Change-Id: Id83b7a2c90100744487b276642158e7c3e93de85
Signed-off-by: Shubhendu Tripathi <shtri...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultiLevelAdministrationHandler.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RoleDAOTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M packaging/dbscripts/multi_level_administration_sp.sql
A packaging/dbscripts/upgrade/03_03_0800_add_app_mode_to_roles.sql
7 files changed, 79 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/18592/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultiLevelAdministrationHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultiLevelAdministrationHandler.java
index c621e2f..9a14efa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultiLevelAdministrationHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MultiLevelAdministrationHandler.java
@@ -3,11 +3,12 @@
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.DbUser;
+import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.RoleType;
 import org.ovirt.engine.core.common.businessentities.permissions;
-import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.users.VdcUser;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -53,7 +54,7 @@
      * @return True if user is admin
      */
     public static boolean isAdminUser(VdcUser user) {
-        List<Role> userRoles = 
getRoleDAO().getAllForUserAndGroups(user.getUserId(), user.getGroupIds());
+        List<Role> userRoles = 
getRoleDAO().getAllForApplicationMode(ConfigurationValues.ApplicationMode.getValue());
 
         for (Role r : userRoles) {
             if (r.getType() == RoleType.ADMIN) {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAO.java
index 9dff333..40ab85d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAO.java
@@ -32,4 +32,14 @@
      * @return the list of the roles
      */
     List<Role> getAllForUserAndGroups(Guid userId, String groupIds);
+
+    /**
+     * This method gets the Roles for the given application mode. The purpose 
of this method is to be able to get roles
+     * specific to an application mode
+     *
+     * @param appMode
+     *            application mode to obtain roles for
+     * @return the list of the roles
+     */
+    List<Role> getAllForApplicationMode(int appMode);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAODbFacadeImpl.java
index 56b2e1e..34ca19b 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RoleDAODbFacadeImpl.java
@@ -6,6 +6,7 @@
 
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.RoleType;
+import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.core.compat.Guid;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -34,7 +35,6 @@
             return entity;
         }
     }
-
 
     @Override
     public Role get(Guid id) {
@@ -71,13 +71,23 @@
     }
 
     @Override
+    public List<Role> getAllForApplicationMode(int appMode) {
+        MapSqlParameterSource parameterSource =
+                getCustomMapSqlParameterSource().addValue("app_mode", appMode);
+        return 
getCallsHandler().executeReadList("GetAllRolesByApplicationMode",
+                RolesRowMapper.instance,
+                parameterSource);
+    }
+
+    @Override
     public void save(Role role) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
                 .addValue("description", role.getdescription())
                 .addValue("id", role.getId()).addValue("name", role.getname())
                 .addValue("is_readonly", role.getis_readonly())
                 .addValue("role_type", role.getType().getId())
-                .addValue("allows_viewing_children", 
role.allowsViewingChildren());
+                .addValue("allows_viewing_children", 
role.allowsViewingChildren())
+                .addValue("app_mode", ApplicationMode.AllModes.getValue()); // 
Default mode set to ALL
 
         getCallsHandler().executeModification("InsertRole", parameterSource);
     }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RoleDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RoleDAOTest.java
index ebb4a26..4626936 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RoleDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RoleDAOTest.java
@@ -11,6 +11,7 @@
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.RoleType;
+import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.core.compat.Guid;
 
 public class RoleDAOTest extends BaseDAOTestCase {
@@ -109,9 +110,22 @@
                 Guid.newGuid().toString());
         assertNotNull(result);
         assertTrue(result.isEmpty());
-
     }
 
+    @Test
+    public void testGetAllForApplicationMode() {
+        List<Role> result = 
dao.getAllForApplicationMode(ApplicationMode.AllModes.getValue());
+        assertNotNull(result);
+        assertFalse(result.isEmpty());
+        assertEquals(4, result.size());
+    }
+
+    @Test
+    public void testGetAllForInvalidApplicationMode() {
+        List<Role> result = dao.getAllForApplicationMode(0);
+        assertNotNull(result);
+        assertTrue(result.isEmpty());
+    }
 
     /**
      * Ensures that saving a role works as expected.
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 0d6f568..a8c5391 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -3180,6 +3180,7 @@
         <column>is_readonly</column>
         <column>role_type</column>
         <column>allows_viewing_children</column>
+        <column>app_mode</column>
         <row>
             <value>119caae6-5c1b-4a82-9858-dd9e5d2e1400</value>
             <value>role1</value>
@@ -3187,6 +3188,7 @@
             <value>0</value>
             <value>2</value>
             <value>true</value>
+            <value>255</value>
         </row>
         <row>
             <value>119caae6-5c1b-4a82-9858-dd9e5d2e1401</value>
@@ -3195,6 +3197,7 @@
             <value>0</value>
             <value>2</value>
             <value>true</value>
+            <value>255</value>
         </row>
         <row>
             <value>f5972bfa-7102-4d33-ad22-9dd421bfba78</value>
@@ -3203,6 +3206,7 @@
             <value>0</value>
             <value>1</value>
             <value>true</value>
+            <value>255</value>
         </row>
         <row>
             <value>f5972bfa-7102-4d33-ad22-9dd421bfba70</value>
@@ -3211,6 +3215,7 @@
             <value>0</value>
             <value>2</value>
             <value>true</value>
+            <value>255</value>
         </row>
     </table>
 
diff --git a/packaging/dbscripts/multi_level_administration_sp.sql 
b/packaging/dbscripts/multi_level_administration_sp.sql
index 101a6bd..bb02d71 100644
--- a/packaging/dbscripts/multi_level_administration_sp.sql
+++ b/packaging/dbscripts/multi_level_administration_sp.sql
@@ -188,12 +188,13 @@
        v_name VARCHAR(126),
        v_is_readonly BOOLEAN,
        v_role_type INTEGER,
-        v_allows_viewing_children BOOLEAN)
+        v_allows_viewing_children BOOLEAN,
+    v_app_mode INTEGER)
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO roles(description, id, name, is_readonly, role_type, 
allows_viewing_children)
-       VALUES(v_description, v_id, v_name, v_is_readonly, v_role_type, 
v_allows_viewing_children);
+INSERT INTO roles(description, id, name, is_readonly, role_type, 
allows_viewing_children, app_mode)
+       VALUES(v_description, v_id, v_name, v_is_readonly, v_role_type, 
v_allows_viewing_children, v_app_mode);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -298,6 +299,17 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION GetAllRolesByApplicationMode(v_app_mode INTEGER)
+RETURNS SETOF roles STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT roles.*
+   FROM roles
+   WHERE roles.app_mode = v_app_mode;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
 ----------------------------------------------------------------
 -- [permissions] Table
 --
diff --git a/packaging/dbscripts/upgrade/03_03_0800_add_app_mode_to_roles.sql 
b/packaging/dbscripts/upgrade/03_03_0800_add_app_mode_to_roles.sql
new file mode 100644
index 0000000..124e304
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_03_0800_add_app_mode_to_roles.sql
@@ -0,0 +1,19 @@
+-- adding app_mode column to roles table to store the application mode for 
which the said role is meant for.
+-- Following is the detail of application modes
+-- Virt - 1
+-- Gluster - 2
+-- VirtGluster - 3 (1+2)
+-- All - 255
+select fn_db_add_column('roles', 'app_mode', 'INTEGER');
+
+UPDATE roles SET app_mode=1 WHERE name in ('UserRole', 'PowerUserRole', 
'DataCenterAdmin', 'StorageAdmin', 'UserVmManager', 'VmPoolAdmin', 
'TemplateAdmin', 'TemplateUser', 'QuotaConsumer', 'TemplateOwner', 
'DiskOperator', 'DiskCreator', 'VmCreator', 'TemplateCreator', 
'VnicProfileUser');
+UPDATE roles SET app_mode=2 WHERE name='GlusterAdmin';
+UPDATE roles SET app_mode=3 WHERE name in ('ClusterAdmin', 'SuperUser', 
'HostAdmin', 'NetworkAdmin');
+UPDATE roles SET app_mode=255 WHERE name in ('ExternalEventsCreator', 
'ExternalTasksCreator');
+
+-- Create the constraint
+ALTER TABLE roles ALTER COLUMN app_mode SET NOT NULL;
+
+-- Create the index
+DROP INDEX if exists IDX_roles__app_mode;
+CREATE INDEX IDX_roles__app_mode ON roles(app_mode);


-- 
To view, visit http://gerrit.ovirt.org/18592
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id83b7a2c90100744487b276642158e7c3e93de85
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to