[Kimchi-devel] [PATCH V4 4/4] Authorization: Remove actions based on roles

wenwang at linux.vnet.ibm.com wenwang at linux.vnet.ibm.com
Wed Jul 23 02:26:50 UTC 2014


From: Wen Wang <wenwang at linux.vnet.ibm.com>

V3 -> V4:
Removed the additional white border line in user mode(Aline)
Minor change to the layout of the storage tab of user mode that makes
the arrow-down/arrow-up more consistent(Aline)

V2 -> V3:
Fixed the cookie usage error.
Hide the actions buttons and show if user has admin mode.
Fixed css inconsistence in storage tab
Remove associated actions of the action button if user is not root

V1 -> V2:
Minor changes in method of removing "Action" title under network tab
(Hongliang Wang)

Authorization: remove actions menu from storage/network tabs for
non-root users

Signed-off-by: Wen Wang <wenwang at linux.vnet.ibm.com>
---
 ui/css/theme-default/network.css |    4 +
 ui/css/theme-default/storage.css |   22 ++++---
 ui/js/src/kimchi.network.js      |    6 ++
 ui/js/src/kimchi.storage_main.js |  127 ++++++++++++++++++++------------------
 ui/pages/tabs/network.html.tmpl  |    4 +-
 ui/pages/tabs/storage.html.tmpl  |    4 +-
 6 files changed, 95 insertions(+), 72 deletions(-)

diff --git a/ui/css/theme-default/network.css b/ui/css/theme-default/network.css
index df66b75..a993fd6 100644
--- a/ui/css/theme-default/network.css
+++ b/ui/css/theme-default/network.css
@@ -94,6 +94,10 @@
     width: 270px;
 }
 
+.network .list .item .column-space-no-border-right {
+    border-right: none;
+}
+
 .network .list .column-action {
     display: inline-block;
     position: absolute;
diff --git a/ui/css/theme-default/storage.css b/ui/css/theme-default/storage.css
index e94c1ec..dfd8410 100644
--- a/ui/css/theme-default/storage.css
+++ b/ui/css/theme-default/storage.css
@@ -17,7 +17,11 @@
  */
 /*   STORAGE   */
 .handle {
-    width: 5%;
+    width: 49px;
+}
+
+.storage-allocate-padding-user {
+    padding-right: 108px;
 }
 
 .storage-title {
@@ -148,37 +152,37 @@
 }
 
 .storage-name {
-    width: 20%;
+    width: 199px;
 }
 
 .storage-state {
-    width: 5%;
+    width: 51px;
 }
 
 .storage-location {
-    width: 29%;
+    width: 288px;
 }
 
 .storage-type {
-    width: 10%;
+    width: 98px;
 }
 
 .storage-capacity {
-    width: 10%;
+    width: 98px;
 }
 
 .storage-allocate {
-    width: 10%;
+    width: 98px;
 }
 
 
 .storage-button {
-    width: 11%;
+    width: 108px;
     text-align: center;
 }
 
 .title-name {
-    width: 198px;
+    width: 199px;
 }
 
 .title-state {
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index c0978da..5b811ca 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -22,6 +22,7 @@ kimchi.initNetwork = function() {
     var networkMode = _tabMode['network'];
     if(networkMode === 'admin') {
         $('.tools').attr('style','display');
+        $('#network-content .header span:last-child').attr('style','display');
         kimchi.initNetworkCreation();
     }
     kimchi.initNetworkListView();
@@ -52,6 +53,11 @@ kimchi.initNetworkListView = function() {
 
 kimchi.addNetworkItem = function(network) {
     $("#networkBody").append(kimchi.getNetworkItemHtml(network));
+    if(_tabMode["network"] === "admin") {
+        $(".column-action").attr("style","display");
+    } else {
+        $(".column-space").addClass('column-space-no-border-right');
+    }
     kimchi.addNetworkActions(network);
 };
 
diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js
index a84ce0f..4b6fd13 100644
--- a/ui/js/src/kimchi.storage_main.js
+++ b/ui/js/src/kimchi.storage_main.js
@@ -30,6 +30,11 @@ kimchi.doListStoragePools = function() {
                 }
             });
             $('#storagepoolsList').html(listHtml);
+            if(_tabMode['storage'] === 'admin') {
+                $('.storage-button').attr('style','display');
+            } else {
+                $('.storage-allocate').addClass('storage-allocate-padding-user');
+            }
             kimchi.storageBindClick();
         } else {
             $('#storagepoolsList').html('');
@@ -74,79 +79,82 @@ kimchi.storageBindClick = function() {
         }
     });
 
-    $('.pool-delete').on('click', function(event) {
-        var $pool = $(this);
-        var settings = {
-            title : i18n['KCHAPI6001M'],
-            content : i18n['KCHPOOL6001M'],
-            confirm : i18n['KCHAPI6002M'],
-            cancel : i18n['KCHAPI6003M']
-        };
-        kimchi.confirm(settings, function() {
-            var poolName = $pool.data('name');
-            kimchi.deleteStoragePool(poolName, function() {
+    if(_tabMode['storage'] === 'admin') {
+        $('.pool-delete').on('click', function(event) {
+            var $pool = $(this);
+            var settings = {
+                title : i18n['KCHAPI6001M'],
+                content : i18n['KCHPOOL6001M'],
+                confirm : i18n['KCHAPI6002M'],
+                cancel : i18n['KCHAPI6003M']
+            };
+            kimchi.confirm(settings, function() {
+                var poolName = $pool.data('name');
+                kimchi.deleteStoragePool(poolName, function() {
+                    kimchi.doListStoragePools();
+                }, function(err) {
+                    kimchi.message.error(err.responseJSON.reason);
+                });
+            });
+        });
+
+        $('.pool-activate').on('click', function(event) {
+            var poolName = $(this).data('name');
+            kimchi.changePoolState(poolName, 'activate', function() {
                 kimchi.doListStoragePools();
             }, function(err) {
                 kimchi.message.error(err.responseJSON.reason);
             });
         });
-    });
 
-    $('.pool-activate').on('click', function(event) {
-        var poolName = $(this).data('name');
-        kimchi.changePoolState(poolName, 'activate', function() {
-            kimchi.doListStoragePools();
-        }, function(err) {
-            kimchi.message.error(err.responseJSON.reason);
-        });
-    });
-
-    $('.pool-deactivate').on('click', function(event) {
-        var poolName = $(this).data('name');
-        var settings = {
-            title : i18n['KCHAPI6001M'],
-            content : i18n['KCHPOOL6012M'],
-            confirm : i18n['KCHAPI6002M'],
-            cancel : i18n['KCHAPI6003M']
-        };
-        if (!$(this).data('persistent')) {
-            kimchi.confirm(settings, function() {
+        $('.pool-deactivate').on('click', function(event) {
+            var poolName = $(this).data('name');
+            var settings = {
+                title : i18n['KCHAPI6001M'],
+                content : i18n['KCHPOOL6012M'],
+                confirm : i18n['KCHAPI6002M'],
+                cancel : i18n['KCHAPI6003M']
+            };
+            if (!$(this).data('persistent')) {
+                kimchi.confirm(settings, function() {
+                    kimchi.changePoolState(poolName, 'deactivate', function() {
+                        kimchi.doListStoragePools();
+                    }, function(err) {
+                        kimchi.message.error(err.responseJSON.reason);
+                    });
+                }, function() {
+                    return false;
+                });
+            }
+            else {
                 kimchi.changePoolState(poolName, 'deactivate', function() {
                     kimchi.doListStoragePools();
                 }, function(err) {
                     kimchi.message.error(err.responseJSON.reason);
                 });
-            }, function() {
-                return false;
-            });
-        }
-        else {
-            kimchi.changePoolState(poolName, 'deactivate', function() {
-                kimchi.doListStoragePools();
-            }, function(err) {
-                kimchi.message.error(err.responseJSON.reason);
-            });
-        }
-    });
+            }
+        });
 
-    $('.storage-action').on('click', function() {
-        var storage_action = $(this);
-        var deleteButton = storage_action.find('.pool-delete');
-        if ('active' === deleteButton.data('stat')) {
-            deleteButton.attr('disabled', 'disabled');
-        } else {
-            deleteButton.removeAttr('disabled');
-        }
-    });
+        $('.storage-action').on('click', function() {
+            var storage_action = $(this);
+            var deleteButton = storage_action.find('.pool-delete');
+            if ('active' === deleteButton.data('stat')) {
+                deleteButton.attr('disabled', 'disabled');
+            } else {
+                deleteButton.removeAttr('disabled');
+            }
+        });
 
-    $('.pool-extend').on('click', function() {
-        $("#logicalPoolExtend").dialog("option", "poolName", $(this).data('name'));
-        $("#logicalPoolExtend").dialog("open");
-    });
+        $('.pool-extend').on('click', function() {
+            $("#logicalPoolExtend").dialog("option", "poolName", $(this).data('name'));
+            $("#logicalPoolExtend").dialog("open");
+        });
+
+        $('#volume-doAdd').on('click', function() {
+            kimchi.window.open('storagevolume-add.html');
+        });
+    }
 
-    $('#volume-doAdd').on('click', function() {
-        kimchi.window.open('storagevolume-add.html');
-    });
     $('.storage-li').on('click', function(event) {
         if (!$(event.target).parents().hasClass('bottom')) {
             if ($(this).data('stat') === 'active') {
@@ -240,6 +248,7 @@ kimchi.storage_main = function() {
         $('#storage-pool-add').on('click', function() {
             kimchi.window.open('storagepool-add.html');
         });
+        $('.list-title .title-actions').attr('style','display');
     }
     kimchi.doListStoragePools();
     kimchi.initLogicalPoolExtend();
diff --git a/ui/pages/tabs/network.html.tmpl b/ui/pages/tabs/network.html.tmpl
index b6091f8..ab57c98 100644
--- a/ui/pages/tabs/network.html.tmpl
+++ b/ui/pages/tabs/network.html.tmpl
@@ -38,7 +38,7 @@
      --><span class="column column-type">$_("Network Type")</span><!--
      --><span class="column column-interface">$_("Interface")</span><!--
      --><span class="column column-space">$_("Address Space")</span><!--
-     --><span class="column">$_("Actions")</span>
+     --><span class="column" style="display:none">$_("Actions")</span>
         </div>
         <div id="networkBody" class="empty-when-logged-off"></div>
     </div>
@@ -104,7 +104,7 @@
  --><span class='column column-type cell'>{type}</span><!--
  --><span class='column column-interface cell'>{interface}</span><!--
  --><span class='column column-space cell'>{addrSpace}</span><!--
- --><span class='column-action'>
+ --><span class='column-action' style="display:none">
         <span class="ui-button-secondary dropdown popable action-button">
             $_("Actions")
             <ul class='popover actionsheet right-side menu-container'>
diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl
index 72eaafd..3b11e55 100644
--- a/ui/pages/tabs/storage.html.tmpl
+++ b/ui/pages/tabs/storage.html.tmpl
@@ -37,7 +37,7 @@
         <li class="title-type">$_("Type")</li>
         <li class="title-capacity">$_("Capacity")</li>
         <li class="title-allocate">$_("Allocated")</li>
-        <li class="title-actions">$_("Actions")</li>
+        <li class="title-actions" style="display:none">$_("Actions")</li>
     </div>
     <ul id="storagepoolsList" class="list-storage empty-when-logged-off"></ul>
 </div>
@@ -76,7 +76,7 @@
             <div class="storage-allocate">
                 <div class="storage-text" data-type="{type}">{allocated}</div>
             </div>
-            <div class="bottom storage-button">
+            <div class="bottom storage-button" style="display:none">
                 <div class="btn dropdown popable storage-action" data-state="{state}" data-type="{type}" data-name="{name}">
                     <span class="text">$_("Actions")</span><span class="arrow"></span>
                     <div class="popover actionsheet right-side" style="width: 250px">
-- 
1.7.1




More information about the Kimchi-devel mailing list