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