As given in the subject this implements role create/update/delete over the manager.
There's currently no coler highlightning for "special" roles. I decided to call "special" roles "Builtin" any feedback on that is much appreciated. Signed-off-by: René Jochum <r.joc...@proxmox.com> --- www/manager6/Makefile | 2 + www/manager6/dc/RoleEdit.js | 60 ++++++++++++++++++++++++++++++ www/manager6/dc/RoleView.js | 66 +++++++++++++++++++++++++++++++-- www/manager6/form/PrivilegesSelector.js | 40 ++++++++++++++++++++ 4 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 www/manager6/dc/RoleEdit.js create mode 100644 www/manager6/form/PrivilegesSelector.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 81ddcc8d..7e9877b2 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -21,6 +21,7 @@ JSSRC= \ form/Boolean.js \ form/CompressionSelector.js \ form/PoolSelector.js \ + form/PrivilegesSelector.js \ form/GroupSelector.js \ form/UserSelector.js \ form/RoleSelector.js \ @@ -185,6 +186,7 @@ JSSRC= \ dc/GroupView.js \ dc/GroupEdit.js \ dc/RoleView.js \ + dc/RoleEdit.js \ dc/ACLView.js \ dc/AuthView.js \ dc/AuthEdit.js \ diff --git a/www/manager6/dc/RoleEdit.js b/www/manager6/dc/RoleEdit.js new file mode 100644 index 00000000..692a88e0 --- /dev/null +++ b/www/manager6/dc/RoleEdit.js @@ -0,0 +1,60 @@ +Ext.define('PVE.dc.RoleEdit', { + extend: 'Proxmox.window.Edit', + xtype: ['pveDcRoleEdit'], + + initComponent : function() { + var me = this; + + console.log("RoleId: " + me.privs); + me.isCreate = !me.roleid; + + var url; + var method; + + if (me.isCreate) { + url = '/api2/extjs/access/roles'; + method = 'POST'; + } else { + url = '/api2/extjs/access/roles/' + me.roleid; + method = 'PUT'; + } + + Ext.applyIf(me, { + subject: gettext('Role'), + url: url, + method: method, + items: [ + { + xtype: me.isCreate ? 'proxmoxtextfield' : 'displayfield', + name: 'roleid', + value: me.roleid, + allowBlank: false, + fieldLabel: gettext('Name') + }, + { + xtype: 'PrivilegesSelector', + name: 'privs', + value: me.privs, + allowBlank: false, + fieldLabel: gettext('Privileges') + } + ] + }); + + me.callParent(); + + if (!me.isCreate) { + me.load({ + success: function(response) { + var data = response.result.data; + var keys = Ext.Object.getKeys(data); + + me.setValues({ + privs: keys, + roleid: me.roleid + }); + } + }); + } + } +}); diff --git a/www/manager6/dc/RoleView.js b/www/manager6/dc/RoleView.js index 611dfbb6..c1c91151 100644 --- a/www/manager6/dc/RoleView.js +++ b/www/manager6/dc/RoleView.js @@ -13,9 +13,9 @@ Ext.define('PVE.dc.RoleView', { var store = new Ext.data.Store({ model: 'pve-roles', - sorters: { - property: 'roleid', - order: 'DESC' + sorters: { + property: 'roleid', + order: 'DESC' } }); @@ -33,14 +33,46 @@ Ext.define('PVE.dc.RoleView', { Proxmox.Utils.monStoreErrors(me, store); + var sm = Ext.create('Ext.selection.RowModel', {}); + + var reload = function() { + store.load(); + }; + + var run_editor = function() { + var rec = sm.getSelection()[0]; + if (!rec) { + return; + } + + if (rec.data.special === "1") { + return; + } + + var win = Ext.create('PVE.dc.RoleEdit',{ + roleid: rec.data.roleid, + privs: rec.data.privs, + }); + win.on('destroy', reload); + win.show(); + }; + Ext.apply(me, { store: store, + selModel: sm, viewConfig: { trackOver: false }, columns: [ { + header: gettext('Builtin'), + width: 60, + sortable: true, + dataIndex: 'special', + renderer: Proxmox.Utils.format_boolean + }, + { header: gettext('Name'), width: 150, sortable: true, @@ -58,8 +90,34 @@ Ext.define('PVE.dc.RoleView', { listeners: { activate: function() { store.load(); + }, + itemdblclick: run_editor, + }, + tbar: [ + { + text: gettext('Create'), + handler: function() { + var win = Ext.create('PVE.dc.GroupEdit', {}); + win.on('destroy', reload); + win.show(); + } + }, + { + xtype: 'proxmoxButton', + text: gettext('Edit'), + disabled: true, + selModel: sm, + handler: run_editor + }, + { + xtype: 'proxmoxStdRemoveButton', + selModel: sm, + callback: function() { + reload(); + }, + baseurl: '/access/roles/' } - } + ] }); me.callParent(); diff --git a/www/manager6/form/PrivilegesSelector.js b/www/manager6/form/PrivilegesSelector.js new file mode 100644 index 00000000..1514c85f --- /dev/null +++ b/www/manager6/form/PrivilegesSelector.js @@ -0,0 +1,40 @@ +Ext.define('PVE.form.PrivilegesSelector', { + extend: 'Proxmox.form.KVComboBox', + xtype: ['PrivilegesSelector'], + + listConfig:{ + minHeight: 50 + }, + + initComponent: function() { + var me = this; + + me.multiSelect = true; + + // So me.store is available. + me.callParent(); + + Proxmox.Utils.API2Request({ + url: '/access/roles/Administrator', + method: 'GET', + success: function(response, options) { + var data = []; + for (var key in response.result.data) { + data.push([key, key]); + } + + data.sort(function(a, b) { + if (a[0] < b[0]) return -1; + if (a[0] > b[0]) return 1; + return 0; + }); + + me.store.setData(data); + }, + + failure: function (response, opts) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + } + }); + } +}); -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel