mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-06-05 16:08:31 +00:00

username can include some special characters, so we have to escape them Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
153 lines
3.1 KiB
JavaScript
153 lines
3.1 KiB
JavaScript
Ext.define('pve-permissions', {
|
|
extend: 'Ext.data.TreeModel',
|
|
fields: [
|
|
'text', 'type',
|
|
{
|
|
type: 'boolean', name: 'propagate',
|
|
},
|
|
],
|
|
});
|
|
|
|
Ext.define('PVE.dc.PermissionGridPanel', {
|
|
extend: 'Ext.tree.Panel',
|
|
alias: 'widget.pveUserPermissionGrid',
|
|
|
|
onlineHelp: 'chapter_user_management',
|
|
|
|
scrollable: true,
|
|
layout: 'fit',
|
|
rootVisible: false,
|
|
animate: false,
|
|
sortableColumns: false,
|
|
|
|
columns: [
|
|
{
|
|
xtype: 'treecolumn',
|
|
header: gettext('Path') + '/' + gettext('Permission'),
|
|
dataIndex: 'text',
|
|
flex: 6,
|
|
},
|
|
{
|
|
header: gettext('Propagate'),
|
|
dataIndex: 'propagate',
|
|
flex: 1,
|
|
renderer: function(value) {
|
|
if (Ext.isDefined(value)) {
|
|
return Proxmox.Utils.format_boolean(value);
|
|
}
|
|
return '';
|
|
},
|
|
},
|
|
],
|
|
|
|
initComponent: function() {
|
|
let me = this;
|
|
|
|
Proxmox.Utils.API2Request({
|
|
url: '/access/permissions?userid=' + me.userid,
|
|
method: 'GET',
|
|
failure: function(response, opts) {
|
|
Proxmox.Utils.setErrorMask(me, response.htmlStatus);
|
|
me.load_task.delay(me.load_delay);
|
|
},
|
|
success: function(response, opts) {
|
|
Proxmox.Utils.setErrorMask(me, false);
|
|
let result = Ext.decode(response.responseText);
|
|
let data = result.data || {};
|
|
|
|
let root = {
|
|
name: '__root',
|
|
expanded: true,
|
|
children: [],
|
|
};
|
|
let idhash = {
|
|
'/': {
|
|
children: [],
|
|
text: '/',
|
|
type: 'path',
|
|
},
|
|
};
|
|
Ext.Object.each(data, function(path, perms) {
|
|
let path_item = {
|
|
text: path,
|
|
type: 'path',
|
|
children: [],
|
|
};
|
|
Ext.Object.each(perms, function(perm, propagate) {
|
|
let perm_item = {
|
|
text: perm,
|
|
type: 'perm',
|
|
propagate: propagate === 1,
|
|
iconCls: 'fa fa-fw fa-unlock',
|
|
leaf: true,
|
|
};
|
|
path_item.children.push(perm_item);
|
|
path_item.expandable = true;
|
|
});
|
|
idhash[path] = path_item;
|
|
});
|
|
|
|
Ext.Object.each(idhash, function(path, item) {
|
|
let parent_item = idhash['/'];
|
|
if (path === '/') {
|
|
parent_item = root;
|
|
item.expanded = true;
|
|
} else {
|
|
let split_path = path.split('/');
|
|
while (split_path.pop()) {
|
|
let parent_path = split_path.join('/');
|
|
if (idhash[parent_path]) {
|
|
parent_item = idhash[parent_path];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
parent_item.children.push(item);
|
|
});
|
|
|
|
me.setRootNode(root);
|
|
},
|
|
});
|
|
|
|
me.callParent();
|
|
|
|
me.store.sorters.add(new Ext.util.Sorter({
|
|
sorterFn: function(rec1, rec2) {
|
|
let v1 = rec1.data.text,
|
|
v2 = rec2.data.text;
|
|
if (rec1.data.type !== rec2.data.type) {
|
|
v2 = rec1.data.type;
|
|
v1 = rec2.data.type;
|
|
}
|
|
if (v1 > v2) {
|
|
return 1;
|
|
} else if (v1 < v2) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
},
|
|
}));
|
|
},
|
|
});
|
|
|
|
Ext.define('PVE.dc.PermissionView', {
|
|
extend: 'Ext.window.Window',
|
|
alias: 'widget.userShowPermissionWindow',
|
|
mixins: ['Proxmox.Mixin.CBind'],
|
|
|
|
scrollable: true,
|
|
width: 800,
|
|
height: 600,
|
|
layout: 'fit',
|
|
cbind: {
|
|
title: (get) => Ext.String.htmlEncode(get('userid')) +
|
|
` - ${gettext('Granted Permissions')}`,
|
|
},
|
|
items: [{
|
|
xtype: 'pveUserPermissionGrid',
|
|
cbind: {
|
|
userid: '{userid}',
|
|
},
|
|
}],
|
|
});
|