]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/UserView.js
ui: dc/UserView: disable Password button based on realm type
[pve-manager.git] / www / manager6 / dc / UserView.js
1 Ext.define('PVE.dc.UserView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveUserView'],
5
6 onlineHelp: 'pveum_users',
7
8 stateful: true,
9 stateId: 'grid-users',
10
11 initComponent: function() {
12 var me = this;
13
14 var caps = Ext.state.Manager.get('GuiCap');
15
16 var store = new Ext.data.Store({
17 id: "users",
18 model: 'pve-users',
19 sorters: {
20 property: 'userid',
21 order: 'DESC',
22 },
23 });
24 let reload = () => store.load();
25
26 let sm = Ext.create('Ext.selection.RowModel', {});
27
28 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
29 selModel: sm,
30 baseurl: '/access/users/',
31 dangerous: true,
32 enableFn: rec => caps.access['User.Modify'] && rec.data.userid !== 'root@pam',
33 callback: () => reload(),
34 });
35 let run_editor = function() {
36 var rec = sm.getSelection()[0];
37 if (!rec || !caps.access['User.Modify']) {
38 return;
39 }
40 Ext.create('PVE.dc.UserEdit', {
41 userid: rec.data.userid,
42 autoShow: true,
43 listeners: {
44 destroy: () => reload(),
45 },
46 });
47 };
48 let edit_btn = new Proxmox.button.Button({
49 text: gettext('Edit'),
50 disabled: true,
51 enableFn: function(rec) {
52 return !!caps.access['User.Modify'];
53 },
54 selModel: sm,
55 handler: run_editor,
56 });
57 let pwchange_btn = new Proxmox.button.Button({
58 text: gettext('Password'),
59 disabled: true,
60 selModel: sm,
61 enableFn: function(record) {
62 if (record.data.realmtype) {
63 let type = record.data.realmtype;
64 if (PVE.Utils.authSchema[type]) {
65 return !!PVE.Utils.authSchema[type].pwchange;
66 }
67 }
68 return false;
69 },
70 handler: function(btn, event, rec) {
71 Ext.create('Proxmox.window.PasswordEdit', {
72 userid: rec.data.userid,
73 autoShow: true,
74 listeners: {
75 destroy: () => reload(),
76 },
77 });
78 },
79 });
80 let tfachange_btn = new Proxmox.button.Button({
81 text: 'TFA',
82 disabled: true,
83 selModel: sm,
84 enableFn: function(record) {
85 if (record.data.realmtype) {
86 let type = record.data.realmtype;
87 if (PVE.Utils.authSchema[type]) {
88 return !!PVE.Utils.authSchema[type].tfa;
89 }
90 }
91 return false;
92 },
93 handler: function(btn, event, rec) {
94 var d = rec.data;
95 var tfa_type = PVE.Parser.parseTfaType(d.keys);
96 Ext.create('PVE.window.TFAEdit', {
97 tfa_type: tfa_type,
98 userid: d.userid,
99 autoShow: true,
100 listeners: {
101 destroy: () => reload(),
102 },
103 });
104 },
105 });
106
107 var perm_btn = new Proxmox.button.Button({
108 text: gettext('Permissions'),
109 disabled: true,
110 selModel: sm,
111 handler: function(btn, event, rec) {
112 Ext.create('PVE.dc.PermissionView', {
113 userid: rec.data.userid,
114 autoShow: true,
115 listeners: {
116 destroy: () => reload(),
117 },
118 });
119 },
120 });
121
122 Ext.apply(me, {
123 store: store,
124 selModel: sm,
125 tbar: [
126 {
127 text: gettext('Add'),
128 disabled: !caps.access['User.Modify'],
129 handler: function() {
130 Ext.create('PVE.dc.UserEdit', {
131 autoShow: true,
132 listeners: {
133 destroy: () => reload(),
134 },
135 });
136 },
137 },
138 '-',
139 edit_btn,
140 remove_btn,
141 '-',
142 pwchange_btn,
143 tfachange_btn,
144 '-',
145 perm_btn,
146 ],
147 viewConfig: {
148 trackOver: false,
149 },
150 columns: [
151 {
152 header: gettext('User name'),
153 width: 200,
154 sortable: true,
155 renderer: userid => Ext.String.htmlEncode(userid.match(/^(.+)(@[^@]+)$/)[1]),
156 dataIndex: 'userid',
157 },
158 {
159 header: gettext('Realm'),
160 width: 100,
161 sortable: true,
162 renderer: userid => Ext.String.htmlEncode(userid.match(/@([^@]+)$/)[1]),
163 dataIndex: 'userid',
164 },
165 {
166 header: gettext('Enabled'),
167 width: 80,
168 sortable: true,
169 renderer: Proxmox.Utils.format_boolean,
170 dataIndex: 'enable',
171 },
172 {
173 header: gettext('Expire'),
174 width: 80,
175 sortable: true,
176 renderer: Proxmox.Utils.format_expire,
177 dataIndex: 'expire',
178 },
179 {
180 header: gettext('Name'),
181 width: 150,
182 sortable: true,
183 renderer: PVE.Utils.render_full_name,
184 dataIndex: 'firstname',
185 },
186 {
187 header: 'TFA',
188 width: 50,
189 sortable: true,
190 renderer: function(v) {
191 let tfa_type = PVE.Parser.parseTfaType(v);
192 if (tfa_type === undefined) {
193 return Proxmox.Utils.noText;
194 } else if (tfa_type === 1) {
195 return Proxmox.Utils.yesText;
196 } else {
197 return tfa_type;
198 }
199 },
200 dataIndex: 'keys',
201 },
202 {
203 header: gettext('Comment'),
204 sortable: false,
205 renderer: Ext.String.htmlEncode,
206 dataIndex: 'comment',
207 flex: 1,
208 },
209 ],
210 listeners: {
211 activate: reload,
212 itemdblclick: run_editor,
213 },
214 });
215
216 me.callParent();
217
218 Proxmox.Utils.monStoreErrors(me, store);
219 },
220 });