},
});
+ var caps = Ext.state.Manager.get('GuiCap');
+ let canEdit = !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'];
+
var sm = Ext.create('Ext.selection.RowModel', {});
var reload = function() {
var run_editor = function() {
var rec = sm.getSelection()[0];
- if (!rec) {
+ if (!rec || !canEdit) {
return;
}
var win = Ext.create('Proxmox.window.Edit', {
me.editBtn = new Proxmox.button.Button({
text: gettext('Edit'),
disabled: true,
+ enableFn: rec => canEdit,
selModel: sm,
handler: run_editor,
});
});
me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
+ enableFn: rec => canEdit,
selModel: sm,
baseurl: me.base_url + '/',
callback: reload,
tbar: ['<b>IPSet:</b>', me.addBtn, me.removeBtn, me.editBtn],
selModel: sm,
columns: [
- { header: 'IPSet', dataIndex: 'name', width: '100' },
- { header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 },
+ {
+ header: 'IPSet',
+ dataIndex: 'name',
+ minWidth: 150,
+ flex: 1,
+ },
+ {
+ header: gettext('Comment'),
+ dataIndex: 'comment',
+ renderer: Ext.String.htmlEncode,
+ flex: 4,
+ },
],
listeners: {
itemdblclick: run_editor,
},
});
+ if (!canEdit) {
+ me.addBtn.setDisabled(true);
+ }
+
me.callParent();
store.load();
if (me.isCreate) {
- me.url = '/api2/extjs' + me.base_url;
- me.method = 'POST';
- } else {
- me.url = '/api2/extjs' + me.base_url + '/' + me.cidr;
- me.method = 'PUT';
- }
+ me.url = '/api2/extjs' + me.base_url;
+ me.method = 'POST';
+ } else {
+ me.url = '/api2/extjs' + me.base_url + '/' + me.cidr;
+ me.method = 'PUT';
+ }
var column1 = [];
autoSelect: false,
editable: true,
base_url: me.list_refs_url,
- value: '',
+ allowBlank: false,
fieldLabel: gettext('IP/CIDR'),
});
} else {
me.addBtn.setDisabled(true);
me.store.removeAll();
} else {
- me.addBtn.setDisabled(false);
+ if (me.canEdit) {
+ me.addBtn.setDisabled(false);
+ }
me.removeBtn.baseurl = url + '/';
me.store.setProxy({
type: 'proxmox',
var sm = Ext.create('Ext.selection.RowModel', {});
+ me.caps = Ext.state.Manager.get('GuiCap');
+ me.canEdit = !!me.caps.vms['VM.Config.Network'] || !!me.caps.dc['Sys.Modify'] || !!me.caps.nodes['Sys.Modify'];
+
var run_editor = function() {
var rec = sm.getSelection()[0];
- if (!rec) {
+ if (!rec || !me.canEdit) {
return;
}
var win = Ext.create('PVE.IPSetCidrEdit', {
me.editBtn = new Proxmox.button.Button({
text: gettext('Edit'),
disabled: true,
+ enableFn: rec => me.canEdit,
selModel: sm,
handler: run_editor,
});
me.addBtn = new Proxmox.button.Button({
text: gettext('Add'),
disabled: true,
+ enableFn: rec => me.canEdit,
handler: function() {
if (!me.base_url) {
return;
});
me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
+ disabled: true,
+ enableFn: rec => me.canEdit,
selModel: sm,
baseurl: me.base_url + '/',
callback: reload,
columns: [
{
xtype: 'rownumberer',
+ // cannot use width on instantiation as rownumberer hard-wires that in the
+ // constructor to avoid being overridden by applyDefaults
+ minWidth: 40,
},
{
header: gettext('IP/CIDR'),
dataIndex: 'cidr',
- width: 150,
+ minWidth: 150,
+ flex: 1,
renderer: function(value, metaData, record) {
value = render_errors(value, metaData, record);
if (record.data.nomatch) {
{
header: gettext('Comment'),
dataIndex: 'comment',
- flex: 1,
+ flex: 3,
renderer: function(value) {
return Ext.util.Format.htmlEncode(value);
},
});
Ext.apply(me, {
- layout: 'border',
- items: [ipset_list, ipset_panel],
+ layout: 'border',
+ items: [ipset_list, ipset_panel],
listeners: {
show: function() {
ipset_list.fireEvent('show', ipset_list);