From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 99CEC91738 for ; Mon, 27 Mar 2023 12:18:36 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 82B88870B for ; Mon, 27 Mar 2023 12:18:36 +0200 (CEST) Received: from bastionodiso.odiso.net (bastionodiso.odiso.net [IPv6:2a0a:1580:2000::2d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Mon, 27 Mar 2023 12:18:35 +0200 (CEST) Received: from kvmformation3.odiso.net (formationkvm3.odiso.net [10.3.94.12]) by bastionodiso.odiso.net (Postfix) with ESMTP id C414E8034; Mon, 27 Mar 2023 12:18:28 +0200 (CEST) Received: by kvmformation3.odiso.net (Postfix, from userid 0) id C09CC263A86; Mon, 27 Mar 2023 12:18:28 +0200 (CEST) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Mon, 27 Mar 2023 12:18:22 +0200 Message-Id: <20230327101822.3082769-4-aderumier@odiso.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230327101822.3082769-1-aderumier@odiso.com> References: <20230327101822.3082769-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.026 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [PATCH pve-manager 2/2] ui: firewall panel/grids : add caps on buttons X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Mar 2023 10:18:36 -0000 Signed-off-by: Alexandre Derumier --- www/manager6/dc/SecurityGroups.js | 7 +++++++ www/manager6/grid/FirewallAliases.js | 6 ++++++ www/manager6/grid/FirewallOptions.js | 6 +++++- www/manager6/grid/FirewallRules.js | 17 ++++++++++++----- www/manager6/panel/IPSet.js | 18 +++++++++++++++++- 5 files changed, 47 insertions(+), 7 deletions(-) diff --git a/www/manager6/dc/SecurityGroups.js b/www/manager6/dc/SecurityGroups.js index 26172bf3..b19e370b 100644 --- a/www/manager6/dc/SecurityGroups.js +++ b/www/manager6/dc/SecurityGroups.js @@ -100,6 +100,8 @@ Ext.define('PVE.SecurityGroupList', { let sm = Ext.create('Ext.selection.RowModel', {}); + let caps = Ext.state.Manager.get('GuiCap'); + let reload = function() { let oldrec = sm.getSelection()[0]; store.load((records, operation, success) => { @@ -130,12 +132,14 @@ Ext.define('PVE.SecurityGroupList', { me.editBtn = new Proxmox.button.Button({ text: gettext('Edit'), + enableFn: rec => !!caps.dc['Sys.Modify'], disabled: true, selModel: sm, handler: run_editor, }); me.addBtn = new Proxmox.button.Button({ text: gettext('Create'), + disabled: !caps.dc['Sys.Modify'], handler: function() { sm.deselectAll(); var win = Ext.create('PVE.SecurityGroupEdit', {}); @@ -148,6 +152,9 @@ Ext.define('PVE.SecurityGroupList', { selModel: sm, baseurl: me.base_url + '/', enableFn: function(rec) { + if (!caps.dc['Sys.Modify']) { + return false; + } return rec && me.base_url; }, callback: () => reload(), diff --git a/www/manager6/grid/FirewallAliases.js b/www/manager6/grid/FirewallAliases.js index 00d0d74b..b6f07334 100644 --- a/www/manager6/grid/FirewallAliases.js +++ b/www/manager6/grid/FirewallAliases.js @@ -104,6 +104,8 @@ Ext.define('PVE.FirewallAliases', { let sm = Ext.create('Ext.selection.RowModel', {}); + let caps = Ext.state.Manager.get('GuiCap'); + let reload = function() { let oldrec = sm.getSelection()[0]; store.load(function(records, operation, success) { @@ -133,11 +135,13 @@ Ext.define('PVE.FirewallAliases', { text: gettext('Edit'), disabled: true, selModel: sm, + enableFn: rec => !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'], handler: run_editor, }); me.addBtn = Ext.create('Ext.Button', { text: gettext('Add'), + disabled: !caps.vms['VM.Config.Network'] && !caps.dc['Sys.Modify'] && !caps.nodes['Sys.Modify'], handler: function() { var win = Ext.create('PVE.FirewallAliasEdit', { base_url: me.base_url, @@ -148,7 +152,9 @@ Ext.define('PVE.FirewallAliases', { }); me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { + disabled: true, selModel: sm, + enableFn: rec => !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'], baseurl: me.base_url + '/', callback: reload, }); diff --git a/www/manager6/grid/FirewallOptions.js b/www/manager6/grid/FirewallOptions.js index 4123bd9f..98b1d258 100644 --- a/www/manager6/grid/FirewallOptions.js +++ b/www/manager6/grid/FirewallOptions.js @@ -21,6 +21,8 @@ Ext.define('PVE.FirewallOptions', { throw "unknown firewall option type"; } + let caps = Ext.state.Manager.get('GuiCap'); + me.rows = {}; var add_boolean_row = function(name, text, defaultValue) { @@ -161,7 +163,9 @@ Ext.define('PVE.FirewallOptions', { return; } var rowdef = me.rows[rec.data.key]; - edit_btn.setDisabled(!rowdef.editor); + if (caps.vms['VM.Config.Network'] || caps.dc['Sys.Modify'] || caps.nodes['Sys.Modify']) { + edit_btn.setDisabled(!rowdef.editor); + } }; Ext.apply(me, { diff --git a/www/manager6/grid/FirewallRules.js b/www/manager6/grid/FirewallRules.js index 5777c7f4..6b3abb1b 100644 --- a/www/manager6/grid/FirewallRules.js +++ b/www/manager6/grid/FirewallRules.js @@ -569,11 +569,14 @@ Ext.define('PVE.FirewallRules', { } me.store.removeAll(); } else { - me.addBtn.setDisabled(false); - me.removeBtn.baseurl = url + '/'; - if (me.groupBtn) { - me.groupBtn.setDisabled(false); + if (me.caps.vms['VM.Config.Network'] || me.caps.dc['Sys.Modify'] || me.caps.nodes['Sys.Modify']) { + me.addBtn.setDisabled(false); + if (me.groupBtn) { + me.groupBtn.setDisabled(false); + } } + me.removeBtn.baseurl = url + '/'; + me.store.setProxy({ type: 'proxmox', url: '/api2/json' + url, @@ -649,6 +652,8 @@ Ext.define('PVE.FirewallRules', { var sm = Ext.create('Ext.selection.RowModel', {}); + me.caps = Ext.state.Manager.get('GuiCap'); + var run_editor = function() { var rec = sm.getSelection()[0]; if (!rec) { @@ -680,6 +685,7 @@ Ext.define('PVE.FirewallRules', { me.editBtn = Ext.create('Proxmox.button.Button', { text: gettext('Edit'), disabled: true, + enableFn: rec => !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'], selModel: sm, handler: run_editor, }); @@ -721,7 +727,7 @@ Ext.define('PVE.FirewallRules', { me.copyBtn = Ext.create('Proxmox.button.Button', { text: gettext('Copy'), selModel: sm, - enableFn: ({ data }) => data.type === 'in' || data.type === 'out', + enableFn: ({ data }) => (data.type === 'in' || data.type === 'out') && (!!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify']), disabled: true, handler: run_copy_editor, }); @@ -743,6 +749,7 @@ Ext.define('PVE.FirewallRules', { } me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { + enableFn: rec => !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'], selModel: sm, baseurl: me.base_url + '/', confirmMsg: false, diff --git a/www/manager6/panel/IPSet.js b/www/manager6/panel/IPSet.js index a4606769..784d0ea7 100644 --- a/www/manager6/panel/IPSet.js +++ b/www/manager6/panel/IPSet.js @@ -42,6 +42,8 @@ Ext.define('PVE.IPSetList', { }, }); + var caps = Ext.state.Manager.get('GuiCap'); + var sm = Ext.create('Ext.selection.RowModel', {}); var reload = function() { @@ -94,6 +96,7 @@ Ext.define('PVE.IPSetList', { me.editBtn = new Proxmox.button.Button({ text: gettext('Edit'), disabled: true, + enableFn: rec => !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'], selModel: sm, handler: run_editor, }); @@ -128,6 +131,7 @@ Ext.define('PVE.IPSetList', { }); me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { + enableFn: rec => !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'], selModel: sm, baseurl: me.base_url + '/', callback: reload, @@ -154,6 +158,10 @@ Ext.define('PVE.IPSetList', { }, }); + if (!caps.vms['VM.Config.Network'] && !caps.dc['Sys.Modify'] && !caps.nodes['Sys.Modify']) { + me.addBtn.setDisabled(true); + } + me.callParent(); store.load(); @@ -268,7 +276,9 @@ Ext.define('PVE.IPSetGrid', { me.addBtn.setDisabled(true); me.store.removeAll(); } else { - me.addBtn.setDisabled(false); + if (me.caps.vms['VM.Config.Network'] || me.caps.dc['Sys.Modify'] || me.caps.nodes['Sys.Modify']) { + me.addBtn.setDisabled(false); + } me.removeBtn.baseurl = url + '/'; me.store.setProxy({ type: 'proxmox', @@ -296,6 +306,8 @@ Ext.define('PVE.IPSetGrid', { var sm = Ext.create('Ext.selection.RowModel', {}); + me.caps = Ext.state.Manager.get('GuiCap'); + var run_editor = function() { var rec = sm.getSelection()[0]; if (!rec) { @@ -312,6 +324,7 @@ Ext.define('PVE.IPSetGrid', { me.editBtn = new Proxmox.button.Button({ text: gettext('Edit'), disabled: true, + enableFn: rec => !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'], selModel: sm, handler: run_editor, }); @@ -319,6 +332,7 @@ Ext.define('PVE.IPSetGrid', { me.addBtn = new Proxmox.button.Button({ text: gettext('Add'), disabled: true, + enableFn: rec => !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'], handler: function() { if (!me.base_url) { return; @@ -333,6 +347,8 @@ Ext.define('PVE.IPSetGrid', { }); me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { + disabled: true, + enableFn: rec => !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'], selModel: sm, baseurl: me.base_url + '/', callback: reload, -- 2.30.2