]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/PermissionView.js
www: add permissions button to userview
[pve-manager.git] / www / manager6 / dc / PermissionView.js
1 /*jslint confusion: true */
2
3 Ext.define('pve-permissions', {
4 extend: 'Ext.data.TreeModel',
5 fields: [
6 'text', 'type',
7 { type: 'boolean', name: 'propagate' }
8 ]
9 });
10
11 Ext.define('PVE.dc.PermissionGridPanel', {
12 extend: 'Ext.tree.Panel',
13 onlineHelp: 'chapter_user_management',
14
15 scrollable: true,
16
17 sorterFn: function(rec1, rec2) {
18 var v1, v2;
19
20 if (rec1.data.type != rec2.data.type) {
21 v2 = rec1.data.type;
22 v1 = rec2.data.type;
23 } else {
24 v1 = rec1.data.text;
25 v2 = rec2.data.text;
26 }
27
28 return (v1 > v2 ? 1 : (v1 < v2 ? -1 : 0));
29 },
30
31 initComponent: function() {
32 var me = this;
33
34 Proxmox.Utils.API2Request({
35 url: '/access/permissions?userid=' + me.userid,
36 method: 'GET',
37 failure: function(response, opts) {
38 Proxmox.Utils.setErrorMask(me, response.htmlStatus);
39 me.load_task.delay(me.load_delay);
40 },
41 success: function(response, opts) {
42 Proxmox.Utils.setErrorMask(me, false);
43 var result = Ext.decode(response.responseText);
44 var data = result.data || {};
45 var records = [];
46
47 var root = { name: '__root', expanded: true, children: [] };
48 var idhash = {};
49 Ext.Object.each(data, function(path, perms) {
50 var path_item = {};
51 path_item.text = path;
52 path_item.type = 'path';
53 path_item.children = [];
54 Ext.Object.each(perms, function(perm, propagate) {
55 var perm_item = {};
56 perm_item.text = perm;
57 perm_item.type = 'perm';
58 perm_item.propagate = propagate == 1 ? true : false;
59 perm_item.iconCls = 'fa fa-fw fa-unlock';
60 perm_item.leaf = true;
61 path_item.children.push(perm_item);
62 path_item.expandable = true;
63 });
64 idhash[path] = path_item;
65 });
66
67 if (!idhash['/']) {
68 idhash['/'] = {
69 children: [],
70 text: '/',
71 type: 'path',
72 };
73 }
74
75 Ext.Object.each(idhash, function(path, item) {
76 var parent_item;
77 if (path == '/') {
78 parent_item = root;
79 item.expand = true;
80 } else {
81 let split_path = path.split('/');
82 while (split_path.pop()) {
83 let parent_path = split_path.join('/');
84 if (parent_item = idhash[parent_path]) {
85 break;
86 }
87 }
88 }
89 if (!parent_item) {
90 parent_item = idhash['/'];
91 }
92 parent_item.children.push(item);
93 });
94
95 me.setRootNode(root);
96 }
97 });
98
99 var sm = Ext.create('Ext.selection.RowModel', {});
100
101 Ext.apply(me, {
102 layout: 'fit',
103 rootVisible: false,
104 animate: false,
105 sortableColumns: false,
106 selModel: sm,
107 columns: [
108 {
109 xtype: 'treecolumn',
110 header: gettext('Path') + '/' + gettext('Permission'),
111 flex: 1,
112 sortable: true,
113 dataIndex: 'text'
114 },
115 {
116 header: gettext('Propagate'),
117 width: 80,
118 sortable: true,
119 renderer: function(value) {
120 if (Ext.isDefined(value)) {
121 return Proxmox.Utils.format_boolean(value);
122 } else {
123 return '';
124 }
125 },
126 dataIndex: 'propagate'
127 },
128 ],
129 listeners: {
130 }
131 });
132
133 me.callParent();
134
135 me.store.sorters.add(new Ext.util.Sorter({
136 sorterFn: me.sorterFn
137 }));
138 }
139 });
140
141 Ext.define('PVE.dc.PermissionView', {
142 extend: 'Ext.window.Window',
143 scrollable: true,
144 width: 800,
145 height: 600,
146 layout: 'fit',
147
148 initComponent: function() {
149 var me = this;
150
151 if (!me.userid) {
152 throw "no userid specified";
153 }
154
155 var grid = Ext.create('PVE.dc.PermissionGridPanel', {
156 userid: me.userid
157 });
158
159 Ext.apply(me, {
160 title: me.userid + ' - ' + gettext('Permissions'),
161 items: [ grid ]
162 });
163
164 me.callParent();
165 }
166 });
167