From b5572d7f503f9736738d0ca7d3a1aa791a64f9fd Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 11 Jan 2012 13:12:23 +0100 Subject: [PATCH] improve ACLView --- www/manager/Makefile | 3 + www/manager/dc/ACLView.js | 110 +++++++++++++++++++++++------- www/manager/dc/GroupView.js | 12 ---- www/manager/dc/RoleView.js | 12 ---- www/manager/dc/UserView.js | 16 ----- www/manager/form/GroupSelector.js | 54 +++++++++++++++ www/manager/form/RoleSelector.js | 47 +++++++++++++ www/manager/form/UserSelector.js | 74 ++++++++++++++++++++ 8 files changed, 262 insertions(+), 66 deletions(-) create mode 100644 www/manager/form/GroupSelector.js create mode 100644 www/manager/form/RoleSelector.js create mode 100644 www/manager/form/UserSelector.js diff --git a/www/manager/Makefile b/www/manager/Makefile index 1035267e..4e2627b1 100644 --- a/www/manager/Makefile +++ b/www/manager/Makefile @@ -23,6 +23,9 @@ JSSRC= \ form/ComboGrid.js \ form/KVComboBox.js \ form/Boolean.js \ + form/GroupSelector.js \ + form/UserSelector.js \ + form/RoleSelector.js \ form/VMIDSelector.js \ form/NetworkCardSelector.js \ form/DiskFormatSelector.js \ diff --git a/www/manager/dc/ACLView.js b/www/manager/dc/ACLView.js index 766fd899..53799fc4 100644 --- a/www/manager/dc/ACLView.js +++ b/www/manager/dc/ACLView.js @@ -1,3 +1,70 @@ +Ext.define('PVE.dc.ACLAdd', { + extend: 'PVE.window.Edit', + alias: ['widget.pveACLAdd'], + + initComponent : function() { + var me = this; + + me.create = true; + + var items = [ + { + xtype: me.path ? 'hiddenfield' : 'textfield', + name: 'path', + value: me.path, + allowBlank: false, + fieldLabel: gettext('Path') + } + ]; + + if (me.aclType === 'group') { + me.title = gettext('Add') + ': ' + gettext("Group Permission"); + items.push({ + xtype: 'pveGroupSelector', + name: 'groups', + fieldLabel: gettext('Group') + }); + } else if (me.aclType === 'user') { + me.title = gettext('Add') + ': ' + gettext("User Permission"); + items.push({ + xtype: 'pveUserSelector', + name: 'users', + fieldLabel: gettext('User') + }); + } else { + throw "unknown ACL type"; + } + + items.push({ + xtype: 'pveRoleSelector', + name: 'roles', + value: 'NoAccess', + fieldLabel: gettext('Role') + }); + + if (!me.path) { + items.push({ + xtype: 'pvecheckbox', + name: 'propagate', + checked: true, + fieldLabel: gettext('Propagate') + }); + } + + var ipanel = Ext.create('PVE.panel.InputPanel', { + items: items + }); + + Ext.applyIf(me, { + url: '/access/acl', + method: 'PUT', + items: [ ipanel ] + }); + + me.callParent(); + } +}); + Ext.define('PVE.dc.ACLView', { extend: 'Ext.grid.GridPanel', @@ -76,23 +143,6 @@ Ext.define('PVE.dc.ACLView', { 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, @@ -133,34 +183,42 @@ Ext.define('PVE.dc.ACLView', { stateful: false, tbar: [ { - text: 'Add', + text: gettext('Add'), menu: new Ext.menu.Menu({ items: [ { - text: gettext('Group'), + text: gettext('Group Permission'), handler: function() { - console.log("add group"); + var win = Ext.create('PVE.dc.ACLAdd',{ + aclType: 'group', + path: me.path + }); + win.on('destroy', reload); + win.show(); } }, { - text: gettext('User'), + text: gettext('User Permission'), handler: function() { - console.log("add user"); + var win = Ext.create('PVE.dc.ACLAdd',{ + aclType: 'user', + path: me.path + }); + win.on('destroy', reload); + win.show(); } } ] }) }, - remove_btn, - edit_btn + remove_btn ], viewConfig: { trackOver: false }, columns: columns, listeners: { - show: reload, - itemdblclick: run_editor + show: reload } }); diff --git a/www/manager/dc/GroupView.js b/www/manager/dc/GroupView.js index 862452d0..e9e1aeec 100644 --- a/www/manager/dc/GroupView.js +++ b/www/manager/dc/GroupView.js @@ -8,10 +8,6 @@ Ext.define('PVE.dc.GroupView', { var store = new Ext.data.Store({ model: 'pve-groups', - proxy: { - type: 'pve', - url: "/api2/json/access/groups" - }, sorters: { property: 'groupid', order: 'DESC' @@ -89,12 +85,4 @@ Ext.define('PVE.dc.GroupView', { me.callParent(); } -}, function() { - - Ext.define('pve-groups', { - extend: 'Ext.data.Model', - fields: [ 'groupid', 'comment' ], - idProperty: 'groupid' - }); - }); diff --git a/www/manager/dc/RoleView.js b/www/manager/dc/RoleView.js index e14ab5ee..c6b733af 100644 --- a/www/manager/dc/RoleView.js +++ b/www/manager/dc/RoleView.js @@ -8,10 +8,6 @@ Ext.define('PVE.dc.RoleView', { var store = new Ext.data.Store({ model: 'pve-roles', - proxy: { - type: 'pve', - url: "/api2/json/access/roles" - }, sorters: { property: 'roleid', order: 'DESC' @@ -62,12 +58,4 @@ Ext.define('PVE.dc.RoleView', { me.callParent(); } -}, function() { - - Ext.define('pve-roles', { - extend: 'Ext.data.Model', - fields: [ 'roleid', 'privs' ], - idProperty: 'roleid' - }); - }); \ No newline at end of file diff --git a/www/manager/dc/UserView.js b/www/manager/dc/UserView.js index 5fe484a2..01c43b19 100644 --- a/www/manager/dc/UserView.js +++ b/www/manager/dc/UserView.js @@ -9,10 +9,6 @@ Ext.define('PVE.dc.UserView', { var store = new Ext.data.Store({ id: "users", model: 'pve-users', - proxy: { - type: 'pve', - url: "/api2/json/access/users" - }, sorters: { property: 'userid', order: 'DESC' @@ -188,16 +184,4 @@ Ext.define('PVE.dc.UserView', { me.callParent(); } -}, function() { - - Ext.define('pve-users', { - extend: 'Ext.data.Model', - fields: [ - 'userid', 'firstname', 'lastname' , 'email', 'comment', - { type: 'boolean', name: 'enable' }, - { type: 'date', dateFormat: 'timestamp', name: 'expire' } - ], - idProperty: 'userid' - }); - }); diff --git a/www/manager/form/GroupSelector.js b/www/manager/form/GroupSelector.js new file mode 100644 index 00000000..93797838 --- /dev/null +++ b/www/manager/form/GroupSelector.js @@ -0,0 +1,54 @@ +Ext.define('PVE.form.GroupSelector', { + extend: 'PVE.form.ComboGrid', + alias: ['widget.pveGroupSelector'], + + initComponent: function() { + var me = this; + + var store = new Ext.data.Store({ + model: 'pve-groups' + }); + + Ext.apply(me, { + store: store, + allowBlank: false, + autoSelect: false, + valueField: 'groupid', + displayField: 'groupid', + listConfig: { + columns: [ + { + header: gettext('Group'), + sortable: true, + dataIndex: 'groupid', + flex: 1 + }, + { + id: 'comment', + header: 'Comment', + sortable: false, + dataIndex: 'comment', + flex: 1 + } + ] + } + }); + + me.callParent(); + + store.load(); + } + +}, function() { + + Ext.define('pve-groups', { + extend: 'Ext.data.Model', + fields: [ 'groupid', 'comment' ], + proxy: { + type: 'pve', + url: "/api2/json/access/groups", + }, + idProperty: 'groupid' + }); + +}); diff --git a/www/manager/form/RoleSelector.js b/www/manager/form/RoleSelector.js new file mode 100644 index 00000000..7ffcad26 --- /dev/null +++ b/www/manager/form/RoleSelector.js @@ -0,0 +1,47 @@ +Ext.define('PVE.form.RoleSelector', { + extend: 'PVE.form.ComboGrid', + alias: ['widget.pveRoleSelector'], + + initComponent: function() { + var me = this; + + var store = new Ext.data.Store({ + model: 'pve-roles' + }); + + Ext.apply(me, { + store: store, + allowBlank: false, + autoSelect: false, + valueField: 'roleid', + displayField: 'roleid', + listConfig: { + columns: [ + { + header: gettext('Role'), + sortable: true, + dataIndex: 'roleid', + flex: 1 + } + ] + } + }); + + me.callParent(); + + store.load(); + } + +}, function() { + + Ext.define('pve-roles', { + extend: 'Ext.data.Model', + fields: [ 'roleid', 'privs' ], + proxy: { + type: 'pve', + url: "/api2/json/access/roles" + }, + idProperty: 'roleid' + }); + +}); diff --git a/www/manager/form/UserSelector.js b/www/manager/form/UserSelector.js new file mode 100644 index 00000000..dd244c76 --- /dev/null +++ b/www/manager/form/UserSelector.js @@ -0,0 +1,74 @@ +Ext.define('PVE.form.UserSelector', { + extend: 'PVE.form.ComboGrid', + alias: ['widget.pveUserSelector'], + + initComponent: function() { + var me = this; + + var store = new Ext.data.Store({ + model: 'pve-users' + }); + + var render_full_name = function(firstname, metaData, record) { + + var first = firstname || ''; + var last = record.data.lastname || ''; + return first + " " + last; + }; + + Ext.apply(me, { + store: store, + allowBlank: false, + autoSelect: false, + valueField: 'userid', + displayField: 'userid', + listConfig: { + columns: [ + { + header: gettext('User'), + sortable: true, + dataIndex: 'userid', + flex: 1 + }, + { + header: 'Name', + sortable: true, + renderer: render_full_name, + dataIndex: 'firstname', + flex: 1 + }, + { + id: 'comment', + header: 'Comment', + sortable: false, + dataIndex: 'comment', + flex: 1 + } + ] + } + }); + + me.callParent(); + + store.load({ params: { enabled: 1 }}); + } + +}, function() { + + Ext.define('pve-users', { + extend: 'Ext.data.Model', + fields: [ + 'userid', 'firstname', 'lastname' , 'email', 'comment', + { type: 'boolean', name: 'enable' }, + { type: 'date', dateFormat: 'timestamp', name: 'expire' } + ], + proxy: { + type: 'pve', + url: "/api2/json/access/users" + }, + idProperty: 'userid' + }); + +}); + +