Admin: password change field for users

- Virtual password field in AdminJS user edit form
- Auto-hashes with bcrypt on save (edit + new actions)
- Leave empty to keep current password
- Description hint in UI
This commit is contained in:
treamz 2026-03-21 23:54:29 +03:00
parent e8aef7aa28
commit cb412f5b1d

View File

@ -101,12 +101,39 @@ async function setupAdmin(app) {
options: {
navigation: { name: 'Пользователи', icon: 'User' },
listProperties: ['id', 'email', 'display_name', 'role', 'is_blocked', 'last_login'],
editProperties: ['email', 'display_name', 'role', 'is_blocked'],
editProperties: ['email', 'display_name', 'role', 'is_blocked', 'password'],
showProperties: ['id', 'email', 'display_name', 'role', 'is_blocked', 'created_at', 'last_login'],
properties: {
password_hash: { isVisible: false },
password: {
type: 'password',
isVisible: { list: false, show: false, edit: true, filter: false },
description: 'Оставьте пустым чтобы не менять',
},
role: { availableValues: [{ value: 'user', label: 'User' }, { value: 'admin', label: 'Admin' }] },
},
actions: {
edit: {
before: async (request) => {
if (request.payload && request.payload.password && request.payload.password.trim()) {
const bcrypt = require('bcrypt');
request.payload.password_hash = await bcrypt.hash(request.payload.password, 10);
}
delete request.payload.password;
return request;
},
},
new: {
before: async (request) => {
if (request.payload && request.payload.password && request.payload.password.trim()) {
const bcrypt = require('bcrypt');
request.payload.password_hash = await bcrypt.hash(request.payload.password, 10);
}
delete request.payload.password;
return request;
},
},
},
},
},
{