Moti Asayag has uploaded a new change for review.

Change subject: engine: Update roles to support Network permissions
......................................................................

engine: Update roles to support Network permissions

The patch introduces a new role for network users:
NetworkUser which provides the user the permissions for
attaching a network to its VM.

In addition, the upgrade script contains the roles and permissions
updates as described on the feature page:
1. Separate CONFIGURE_STORAGE_POOL_NETWORK to three roles:
1.1. CREATE_STORAGE_POOL_NETWORK
1.2. DELETE_STORAGE_POOL_NETWORK
1.3. CONFIGURE_STORAGE_POOL_NETWORK - acts as EDIT action group
2. Associate ASSIGN_CLUSTER_NETWORK action group with SUPER_USER,
DATA_CENTER_ADMIN and NETWORK_ADMIN.
3. Update Network Admin role
4. Grant 'NetworkUser' permission to 'everyone' for all of the networks.

Change-Id: I5b1d13c7578e6c5fcbf0852cb63b1f6bc51a511d
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
A backend/manager/dbscripts/upgrade/03_02_0020_add_permissions_on_networks.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PredefinedRoles.java
2 files changed, 153 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/39/9539/1

diff --git 
a/backend/manager/dbscripts/upgrade/03_02_0020_add_permissions_on_networks.sql 
b/backend/manager/dbscripts/upgrade/03_02_0020_add_permissions_on_networks.sql
new file mode 100644
index 0000000..cc3118a
--- /dev/null
+++ 
b/backend/manager/dbscripts/upgrade/03_02_0020_add_permissions_on_networks.sql
@@ -0,0 +1,151 @@
+-- Update existing roles with action groups and introduce new networks role
+
+-- Helper method for adding an action group to a role if doesn't exist
+CREATE OR REPLACE FUNCTION 
__temp_add_action_group_to_role_03_02_0020(v_role_id UUID, v_action_group_id 
INTEGER)
+RETURNS VOID
+AS $procedure$
+BEGIN
+       INSERT INTO roles_groups(role_id,action_group_id)
+       SELECT v_role_id, v_action_group_id
+       WHERE NOT EXISTS (SELECT 1
+                         FROM roles_groups
+                         WHERE role_id = v_role_id
+                         AND action_group_id = v_action_group_id);
+RETURN;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION __temp_insert_predefined_roles_03_02_0020()
+RETURNS VOID
+   AS $procedure$
+   DECLARE
+   v_SUPER_USER_ID_0001 UUID;
+   v_DATA_CENTER_ADMIN_ID UUID;
+   v_NETWORK_ADMIN_ID UUID;
+   v_NETWORK_USER_ID UUID;
+   v_everyone_object_id  UUID;
+
+BEGIN
+   v_SUPER_USER_ID_0001 := '00000000-0000-0000-0000-000000000001';
+   v_DATA_CENTER_ADMIN_ID := 'DEF00002-0000-0000-0000-DEF000000002';
+   v_NETWORK_ADMIN_ID := 'DEF00005-0000-0000-0000-DEF000000005';
+   v_NETWORK_USER_ID := 'DEF0000A-0000-0000-0000-DEF000000010';
+
+
+------------------------------------------------
+--- Update existing roles with new Action Groups
+------------------------------------------------
+-- Add ActionGroup 704 (CREATE_STORAGE_POOL_NETWORK) to any role which 
contains ActionGroup 703 (CONFIGURE_STORAGE_POOL_NETWORK)
+INSERT INTO roles_groups (role_id, action_group_id)
+SELECT DISTINCT role_id, 704
+FROM roles_groups a
+WHERE NOT EXISTS (SELECT 1
+                  FROM roles_groups b
+                  WHERE b.role_id = a.role_id
+                  AND b.action_group_id = 704)
+AND EXISTS (SELECT 1
+            FROM roles_groups b
+            WHERE b.role_id = a.role_id
+            AND b.action_group_id = 703);
+
+-- Add ActionGroup 705 (DELETE_STORAGE_POOL_NETWORK) to any role which 
contains ActionGroup 703 (CONFIGURE_STORAGE_POOL_NETWORK)
+INSERT INTO roles_groups (role_id, action_group_id)
+SELECT DISTINCT role_id, 705
+FROM roles_groups a
+WHERE NOT EXISTS (SELECT 1
+                  FROM roles_groups b
+                  WHERE b.role_id = a.role_id
+                  AND b.action_group_id = 705)
+AND EXISTS (SELECT 1
+            FROM roles_groups b
+            WHERE b.role_id = a.role_id
+            AND b.action_group_id = 703);
+
+-------------------------
+--- Update SuperUser role
+-------------------------
+
+-- Add ASSIGN_CLUSTER_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_SUPER_USER_ID_0001, 404);
+
+--------------------------------
+-- UPDATE DATA_CENTER_ADMIN role
+--------------------------------
+
+-- Add ASSIGN_CLUSTER_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_DATA_CENTER_ADMIN_ID, 
404);
+
+----------------------------
+-- UPDATE NETWORK_ADMIN role
+----------------------------
+
+-- Add ASSIGN_CLUSTER_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID, 404);
+
+-- Add PORT_MIRRORING
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID, 1200);
+
+-- Add CONFIGURE_STORAGE_POOL_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID ,703);
+
+-- Add CREATE_STORAGE_POOL_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID ,704);
+
+-- Add DELETE_STORAGE_POOL_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID ,705);
+
+-- Add CONFIGURE_VM_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID ,9);
+
+-- Add CONFIGURE_TEMPLATE_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_ADMIN_ID ,204);
+
+-- Delete MANIPUTLATE_HOST
+DELETE FROM roles_groups WHERE role_id = v_NETWORK_ADMIN_ID AND 
action_group_id = 103;
+
+------------------------
+-- ADD NETWORK_USER role
+------------------------
+DELETE FROM roles_groups WHERE role_id = v_NETWORK_USER_ID;
+INSERT INTO roles(id,name,description,is_readonly,role_type) SELECT 
v_NETWORK_USER_ID, 'NetworkUser', 'Network User', true, 2
+WHERE NOT EXISTS (SELECT id,name,description,is_readonly,role_type
+                  FROM roles
+                  WHERE id = v_NETWORK_USER_ID
+                  AND name='NetworkUser'
+                  AND description='Network User'
+                  AND is_readonly=true
+                  AND role_type=2);
+
+-- Add CONFIGURE_VM_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_USER_ID, 9);
+
+-- Add CONFIGURE_TEMPLATE_NETWORK
+PERFORM __temp_add_action_group_to_role_03_02_0020(v_NETWORK_USER_ID, 204);
+
+-------------------------------------------------------
+-- Grant NetworkUser role to 'everyone' on all networks
+-------------------------------------------------------
+v_everyone_object_id := getGlobalIds('everyone');
+
+INSERT INTO permissions (id,
+                         role_id,
+                         ad_element_id,
+                         object_id,
+                         object_type_id)
+      (SELECT uuid_generate_v1(),
+             v_NETWORK_USER_ID,
+             v_everyone_object_id,
+             id,
+             20
+       FROM network);
+
+ RETURN;
+END; $procedure$
+LANGUAGE plpgsql;
+
+SELECT __temp_insert_predefined_roles_03_02_0020();
+DROP function __temp_insert_predefined_roles_03_02_0020();
+DROP function __temp_add_action_group_to_role_03_02_0020(UUID, INTEGER);
+
+
+
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PredefinedRoles.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PredefinedRoles.java
index e698f49..ab11a46 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PredefinedRoles.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PredefinedRoles.java
@@ -20,7 +20,8 @@
     DISK_CREATOR(new Guid("DEF0000A-0000-0000-0000-DEF00000000C")),
     VM_CREATOR(new Guid("DEF0000A-0000-0000-0000-DEF00000000D")),
     TEMPLATE_CREATOR(new Guid("DEF0000A-0000-0000-0000-DEF00000000E")),
-    TEMPLATE_OWNER(new Guid("DEF0000A-0000-0000-0000-DEF00000000F"));
+    TEMPLATE_OWNER(new Guid("DEF0000A-0000-0000-0000-DEF00000000F")),
+    NETWORK_USER(new Guid("DEF0000A-0000-0000-0000-DEF000000010"));
 
     private Guid id;
 


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

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

Reply via email to