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