initComponent: function() {
var me = this;
- var i;
var nodename = me.pveSelNode.data.node;
if (!nodename) {
features: {
header: gettext('Features'),
defaultValue: Proxmox.Utils.noneText,
- editor: Proxmox.UserName === 'root@pam'
- ? 'PVE.lxc.FeaturesEdit' : undefined,
+ editor: 'PVE.lxc.FeaturesEdit',
},
hookscript: {
header: gettext('Hookscript'),
var revert_btn = new PVE.button.PendingRevert();
var set_button_status = function() {
- var sm = me.getSelectionModel();
- var rec = sm.getSelection()[0];
+ let button_sm = me.getSelectionModel();
+ let rec = button_sm.getSelection()[0];
if (!rec) {
edit_btn.disable();
var pending = rec.data.delete || me.hasPendingChanges(key);
var rowdef = rows[key];
- edit_btn.setDisabled(!rowdef.editor);
+ if (key === 'features') {
+ let unprivileged = me.getStore().getById('unprivileged').data.value;
+ let root = Proxmox.UserName === 'root@pam';
+ let vmalloc = caps.vms['VM.Allocate'];
+ edit_btn.setDisabled(!(root || (vmalloc && unprivileged)));
+ } else {
+ edit_btn.setDisabled(!rowdef.editor);
+ }
+
revert_btn.setDisabled(!pending);
};