]> git.proxmox.com Git - pve-manager.git/commitdiff
implement delete in ACLView
authorDietmar Maurer <dietmar@proxmox.com>
Wed, 11 Jan 2012 09:00:23 +0000 (10:00 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 11 Jan 2012 09:00:23 +0000 (10:00 +0100)
www/manager/dc/ACLView.js

index a412a9f4ea469c42874720ef5e1c69f18e68a9df..766fd899a890409a5636999507ed1e54dedbfe91 100644 (file)
@@ -3,6 +3,9 @@ Ext.define('PVE.dc.ACLView', {
 
     alias: ['widget.pveACLView'],
 
+    // use fixed path
+    path: undefined,
+
     initComponent : function() {
        var me = this;
 
@@ -18,6 +21,16 @@ Ext.define('PVE.dc.ACLView', {
            }
        });
 
+       if (me.path) {
+           store.filters.add(new Ext.util.Filter({
+               filterFn: function(item) {
+                   if (item.data.path === me.path) {
+                       return true;
+                   }
+               }
+           }));
+       }
+
        var render_ugid = function(ugid, metaData, record) {
            if (record.data.type == 'group') {
                return '@' + ugid;
@@ -26,43 +39,128 @@ Ext.define('PVE.dc.ACLView', {
            return ugid;
        };
 
+       var columns = [
+           {
+               header: gettext('User') + '/' + gettext('Group'),
+               flex: 1,
+               sortable: true,
+               renderer: render_ugid,
+               dataIndex: 'ugid'
+           },
+           {
+               header: gettext('Role'),
+               flex: 1,
+               sortable: true,
+               dataIndex: 'roleid'
+           }
+       ];
+
+       if (!me.path) {
+           columns.unshift({
+               header: gettext('Path'),
+               flex: 1,
+               sortable: true,
+               dataIndex: 'path'
+           });
+           columns.push({
+               header: gettext('Propagate'),
+               width: 80,
+               sortable: true,
+               dataIndex: 'propagate'
+           });
+       }
+
+       var sm = Ext.create('Ext.selection.RowModel', {});
+
+       var reload = function() {
+           store.load();
+       };
+
+
+       var run_editor = function() {
+           var rec = sm.getSelection()[0];
+           if (!rec) {
+               return;
+           }
+
+           console.dir(rec);
+       };
+
+       var edit_btn = new PVE.button.Button({
+           text: gettext('Edit'),
+           disabled: true,
+           selModel: sm,
+           handler: run_editor
+       });
+
+       var remove_btn = new PVE.button.Button({
+           text: gettext('Remove'),
+           disabled: true,
+           selModel: sm,
+           confirmMsg: gettext('Are you sure you want to remove this entry'),
+           handler: function(btn, event, rec) {
+               var params = { 
+                   'delete': 1, 
+                   path: rec.data.path, 
+                   roles: rec.data.roleid
+               };
+               if (rec.data.type === 'group') {
+                   params.groups = rec.data.ugid;
+               } else if (rec.data.type === 'user') {
+                   params.users = rec.data.ugid;
+               } else {
+                   throw 'unknown data type';
+               }
+
+               PVE.Utils.API2Request({
+                   url: '/access/acl',
+                   params: params,
+                   method: 'PUT',
+                   waitMsgTarget: me,
+                   callback: function() {
+                       reload();
+                   },
+                   failure: function (response, opts) {
+                       Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                   }
+               });
+           }
+       });
+
        Ext.apply(me, {
            store: store,
+           selModel: sm,
            stateful: false,
-           viewConfig: {
-               trackOver: false
-           },
-           columns: [
-               {
-                   header: gettext('Path'),
-                   width: 200,
-                   sortable: true,
-                   dataIndex: 'path'
-               },
+           tbar: [
                {
-                   header: gettext('User') + '/' + gettext('Group'),
-                   width: 200,
-                   sortable: true,
-                   renderer: render_ugid,
-                   dataIndex: 'ugid'
+                   text: 'Add',
+                   menu: new Ext.menu.Menu({
+                       items: [
+                           {
+                               text: gettext('Group'),
+                               handler: function() {
+                                   console.log("add group");
+                               }
+                           },
+                           {
+                               text: gettext('User'),
+                               handler: function() {
+                                   console.log("add user");
+                               }
+                           }
+                       ]
+                   })
                },
-               {
-                   header: gettext('Role'),
-                   width: 150,
-                   sortable: true,
-                   dataIndex: 'roleid'
-               },
-               {
-                   header: gettext('Propagate'),
-                   width: 80,
-                   sortable: true,
-                   dataIndex: 'propagate'
-               }
+               remove_btn,
+               edit_btn
            ],
+           viewConfig: {
+               trackOver: false
+           },
+           columns: columns,
            listeners: {
-               show: function() {
-                   store.load();
-               }
+               show: reload,
+               itemdblclick: run_editor
            }
        });