]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/ACLView.js
use Proxmox.Utils instead of PVE.Utils
[pve-manager.git] / www / manager6 / dc / ACLView.js
1 Ext.define('PVE.dc.ACLAdd', {
2 extend: 'PVE.window.Edit',
3 alias: ['widget.pveACLAdd'],
4 url: '/access/acl',
5 method: 'PUT',
6 isAdd: true,
7 initComponent : function() {
8
9 var me = this;
10
11 me.isCreate = true;
12
13 var items = [
14 {
15 xtype: me.path ? 'hiddenfield' : 'textfield',
16 name: 'path',
17 value: me.path,
18 allowBlank: false,
19 fieldLabel: gettext('Path')
20 }
21 ];
22
23 if (me.aclType === 'group') {
24 me.subject = gettext("Group Permission");
25 items.push({
26 xtype: 'pveGroupSelector',
27 name: 'groups',
28 fieldLabel: gettext('Group')
29 });
30 } else if (me.aclType === 'user') {
31 me.subject = gettext("User Permission");
32 items.push({
33 xtype: 'pveUserSelector',
34 name: 'users',
35 fieldLabel: gettext('User')
36 });
37 } else {
38 throw "unknown ACL type";
39 }
40
41 items.push({
42 xtype: 'pveRoleSelector',
43 name: 'roles',
44 value: 'NoAccess',
45 fieldLabel: gettext('Role')
46 });
47
48 if (!me.path) {
49 items.push({
50 xtype: 'pvecheckbox',
51 name: 'propagate',
52 checked: true,
53 uncheckedValue: 0,
54 fieldLabel: gettext('Propagate')
55 });
56 }
57
58 var ipanel = Ext.create('PVE.panel.InputPanel', {
59 items: items,
60 onlineHelp: 'pveum_permission_management'
61 });
62
63 Ext.apply(me, {
64 items: [ ipanel ]
65 });
66
67 me.callParent();
68 }
69 });
70
71 Ext.define('PVE.dc.ACLView', {
72 extend: 'Ext.grid.GridPanel',
73
74 alias: ['widget.pveACLView'],
75
76 onlineHelp: 'chapter_user_management',
77
78 stateful: true,
79 stateId: 'grid-acls',
80
81 // use fixed path
82 path: undefined,
83
84 initComponent : function() {
85 var me = this;
86
87 var store = Ext.create('Ext.data.Store',{
88 model: 'pve-acl',
89 proxy: {
90 type: 'pve',
91 url: "/api2/json/access/acl"
92 },
93 sorters: {
94 property: 'path',
95 order: 'DESC'
96 }
97 });
98
99 if (me.path) {
100 store.addFilter(Ext.create('Ext.util.Filter',{
101 filterFn: function(item) {
102 if (item.data.path === me.path) {
103 return true;
104 }
105 }
106 }));
107 }
108
109 var render_ugid = function(ugid, metaData, record) {
110 if (record.data.type == 'group') {
111 return '@' + ugid;
112 }
113
114 return ugid;
115 };
116
117 var columns = [
118 {
119 header: gettext('User') + '/' + gettext('Group'),
120 flex: 1,
121 sortable: true,
122 renderer: render_ugid,
123 dataIndex: 'ugid'
124 },
125 {
126 header: gettext('Role'),
127 flex: 1,
128 sortable: true,
129 dataIndex: 'roleid'
130 }
131 ];
132
133 if (!me.path) {
134 columns.unshift({
135 header: gettext('Path'),
136 flex: 1,
137 sortable: true,
138 dataIndex: 'path'
139 });
140 columns.push({
141 header: gettext('Propagate'),
142 width: 80,
143 sortable: true,
144 dataIndex: 'propagate'
145 });
146 }
147
148 var sm = Ext.create('Ext.selection.RowModel', {});
149
150 var reload = function() {
151 store.load();
152 };
153
154 var remove_btn = new Proxmox.button.Button({
155 text: gettext('Remove'),
156 disabled: true,
157 selModel: sm,
158 confirmMsg: gettext('Are you sure you want to remove this entry'),
159 handler: function(btn, event, rec) {
160 var params = {
161 'delete': 1,
162 path: rec.data.path,
163 roles: rec.data.roleid
164 };
165 if (rec.data.type === 'group') {
166 params.groups = rec.data.ugid;
167 } else if (rec.data.type === 'user') {
168 params.users = rec.data.ugid;
169 } else {
170 throw 'unknown data type';
171 }
172
173 Proxmox.Utils.API2Request({
174 url: '/access/acl',
175 params: params,
176 method: 'PUT',
177 waitMsgTarget: me,
178 callback: function() {
179 reload();
180 },
181 failure: function (response, opts) {
182 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
183 }
184 });
185 }
186 });
187
188 Proxmox.Utils.monStoreErrors(me, store);
189
190 Ext.apply(me, {
191 store: store,
192 selModel: sm,
193 tbar: [
194 {
195 text: gettext('Add'),
196 menu: {
197 xtype: 'menu',
198 items: [
199 {
200 text: gettext('Group Permission'),
201 iconCls: 'fa fa-fw fa-group',
202 handler: function() {
203 var win = Ext.create('PVE.dc.ACLAdd',{
204 aclType: 'group',
205 path: me.path
206 });
207 win.on('destroy', reload);
208 win.show();
209 }
210 },
211 {
212 text: gettext('User Permission'),
213 iconCls: 'fa fa-fw fa-user',
214 handler: function() {
215 var win = Ext.create('PVE.dc.ACLAdd',{
216 aclType: 'user',
217 path: me.path
218 });
219 win.on('destroy', reload);
220 win.show();
221 }
222 }
223 ]
224 }
225 },
226 remove_btn
227 ],
228 viewConfig: {
229 trackOver: false
230 },
231 columns: columns,
232 listeners: {
233 activate: reload
234 }
235 });
236
237 me.callParent();
238 }
239 }, function() {
240
241 Ext.define('pve-acl', {
242 extend: 'Ext.data.Model',
243 fields: [
244 'path', 'type', 'ugid', 'roleid',
245 {
246 name: 'propagate',
247 type: 'boolean'
248 }
249 ]
250 });
251
252 });