]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/RoleView.js
guest import: allow setting VLAN-tag
[pve-manager.git] / www / manager6 / dc / RoleView.js
1 Ext.define('PVE.dc.RoleView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveRoleView'],
5
6 onlineHelp: 'pveum_roles',
7
8 stateful: true,
9 stateId: 'grid-roles',
10
11 initComponent: function() {
12 let me = this;
13
14 let store = new Ext.data.Store({
15 model: 'pmx-roles',
16 sorters: {
17 property: 'roleid',
18 direction: 'ASC',
19 },
20 });
21 Proxmox.Utils.monStoreErrors(me, store);
22
23 let sm = Ext.create('Ext.selection.RowModel', {});
24 let run_editor = function() {
25 let rec = sm.getSelection()[0];
26 if (!rec) {
27 return;
28 }
29 if (rec.data.special) {
30 return;
31 }
32 Ext.create('PVE.dc.RoleEdit', {
33 roleid: rec.data.roleid,
34 privs: rec.data.privs,
35 listeners: {
36 destroy: () => store.load(),
37 },
38 autoShow: true,
39 });
40 };
41
42 Ext.apply(me, {
43 store: store,
44 selModel: sm,
45
46 viewConfig: {
47 trackOver: false,
48 },
49 columns: [
50 {
51 header: gettext('Built-In'),
52 width: 65,
53 sortable: true,
54 dataIndex: 'special',
55 renderer: Proxmox.Utils.format_boolean,
56 },
57 {
58 header: gettext('Name'),
59 width: 150,
60 sortable: true,
61 dataIndex: 'roleid',
62 },
63 {
64 itemid: 'privs',
65 header: gettext('Privileges'),
66 sortable: false,
67 renderer: (value, metaData) => {
68 if (!value) {
69 return '-';
70 }
71 metaData.style = 'white-space:normal;'; // allow word wrap
72 return value.replace(/,/g, ' ');
73 },
74 variableRowHeight: true,
75 dataIndex: 'privs',
76 flex: 1,
77 },
78 ],
79 listeners: {
80 activate: function() {
81 store.load();
82 },
83 itemdblclick: run_editor,
84 },
85 tbar: [
86 {
87 text: gettext('Create'),
88 handler: function() {
89 Ext.create('PVE.dc.RoleEdit', {
90 listeners: {
91 destroy: () => store.load(),
92 },
93 autoShow: true,
94 });
95 },
96 },
97 {
98 xtype: 'proxmoxButton',
99 text: gettext('Edit'),
100 disabled: true,
101 selModel: sm,
102 handler: run_editor,
103 enableFn: (rec) => !rec.data.special,
104 },
105 {
106 xtype: 'proxmoxStdRemoveButton',
107 selModel: sm,
108 callback: () => store.load(),
109 baseurl: '/access/roles/',
110 enableFn: (rec) => !rec.data.special,
111 },
112 ],
113 });
114
115 me.callParent();
116 },
117 });