[pve-devel] [PATCH manager] fix #2574: filter duplicate storage paths in ACL selector

Fabian Grünbichler f.gruenbichler at proxmox.com
Tue Feb 4 11:09:33 CET 2020


we don't need one entry per storage per node, since ACLs just operate
on the storage ID and don't care about the node.

use the fact that record IDs are unique in ExtJS stores, and just re-use
our ACL 'ID' as record ID.

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
we could also re-define contains to filter by value, or use
Ext.Array.findBy but all of that seems less straightforward to me..

 www/manager6/data/PermPathStore.js    | 28 ++++++++++++++-------------
 www/manager6/form/PermPathSelector.js |  4 ++--
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/www/manager6/data/PermPathStore.js b/www/manager6/data/PermPathStore.js
index 90837d1c..2e87434e 100644
--- a/www/manager6/data/PermPathStore.js
+++ b/www/manager6/data/PermPathStore.js
@@ -1,15 +1,15 @@
 Ext.define('PVE.data.PermPathStore', {
     extend: 'Ext.data.Store',
     alias: 'store.pvePermPath',
-    fields: [ 'value' ],
+    fields: [ 'id' ],
     autoLoad: false,
     data: [
-	{'value':  '/'},
-	{'value':  '/access'},
-	{'value': '/nodes'},
-	{'value': '/pool'},
-	{'value': '/storage'},
-	{'value': '/vms'}
+	{'id':  '/'},
+	{'id':  '/access'},
+	{'id': '/nodes'},
+	{'id': '/pool'},
+	{'id': '/storage'},
+	{'id': '/vms'}
     ],
 
     constructor: function(config) {
@@ -23,22 +23,24 @@ Ext.define('PVE.data.PermPathStore', {
 	PVE.data.ResourceStore.each(function(record) {
 	    switch (record.get('type')) {
 		case 'node':
-		    me.add({value: '/nodes/' + record.get('text')});
+		    me.add({id: '/nodes/' + record.get('text')});
 		    break;
 
 		case 'qemu':
-		    me.add({value: '/vms/' + record.get('vmid')});
+		    me.add({id: '/vms/' + record.get('vmid')});
 		    break;
 
 		case 'lxc':
-		    me.add({value: '/vms/' + record.get('vmid')});
+		    me.add({id: '/vms/' + record.get('vmid')});
 		    break;
 
 		case 'storage':
-		    me.add({value: '/storage/' + record.get('storage')});
+		    /* multiple resource entries for storages in a cluster,
+		     * only one ACL path! */
+		    me.add({id: '/storage/' + record.get('storage')});
 		    break;
 		case 'pool':
-		    me.add({value: '/pool/' + record.get('pool')});
+		    me.add({id: '/pool/' + record.get('pool')});
 		    break;
 	    }
 	});
@@ -48,7 +50,7 @@ Ext.define('PVE.data.PermPathStore', {
 	me.fireEvent('datachanged', me);
 
 	me.sort({
-	    property: 'value',
+	    property: 'id',
 	    direction: 'ASC'
 	});
     }
diff --git a/www/manager6/form/PermPathSelector.js b/www/manager6/form/PermPathSelector.js
index 928a9621..21ca01b3 100644
--- a/www/manager6/form/PermPathSelector.js
+++ b/www/manager6/form/PermPathSelector.js
@@ -2,8 +2,8 @@ Ext.define('PVE.form.PermPathSelector', {
     extend: 'Ext.form.field.ComboBox',
     xtype: 'pvePermPathSelector',
 
-    valueField: 'value',
-    displayField: 'value',
+    valueField: 'id',
+    displayField: 'id',
     typeAhead: true,
     queryMode: 'local',
     store: {
-- 
2.20.1





More information about the pve-devel mailing list