fix create and update user

This commit is contained in:
romantarkin 2025-08-17 10:40:58 +05:00
parent 89aa18bb4f
commit 5c42f03e47
4 changed files with 40 additions and 9 deletions

View File

@ -7,10 +7,23 @@ dotenv.config();
export default {
async create(req, res) {
try {
const { password, ...rest } = req.body;
const { password, role, ...rest } = req.body;
// Находим роль по имени
let role_id;
const roleToUse = role || 'user'; // По умолчанию используем "user"
const roleRecord = await Role.findOne({ where: { name: roleToUse } });
if (!roleRecord) {
return res.status(400).json({ error: `Role '${roleToUse}' not found` });
}
role_id = roleRecord.id;
const password_hash = await bcrypt.hash(password, 10);
const user = await User.create({ ...rest, password_hash });
res.status(201).json(user);
const user = await User.create({ ...rest, role_id, password_hash });
// Возвращаем пользователя с информацией о роли
const userWithRole = await User.findByPk(user.id, { include: Role });
res.status(201).json(userWithRole);
} catch (err) {
res.status(400).json({ error: err.message });
}
@ -43,12 +56,27 @@ export default {
try {
const user = await User.findByPk(req.params.id);
if (!user) return res.status(404).json({ error: 'User not found' });
const { password, ...rest } = req.body;
const { password, role, ...rest } = req.body;
// Обрабатываем роль
if (role !== undefined) {
const roleRecord = await Role.findOne({ where: { name: role } });
if (!roleRecord) {
return res.status(400).json({ error: `Role '${role}' not found` });
}
rest.role_id = roleRecord.id;
}
if (password) {
rest.password_hash = await bcrypt.hash(password, 10);
}
await user.update(rest);
res.json(user);
// Возвращаем пользователя с информацией о роли
const userWithRole = await User.findByPk(user.id, { include: Role });
res.json(userWithRole);
} catch (err) {
res.status(400).json({ error: err.message });
}

View File

@ -14,7 +14,7 @@ export default function CreateUserModal({ isOpen, onClose, user, loading, onChan
<input type="text" value={user.name} onChange={e => onChange({ ...user, name: e.target.value })} required className={styles.input} />
</label>
<label className={styles.label}>Роль
<select value={user.role} onChange={e => onChange({ ...user, role: e.target.value })} required className={styles.input}>
<select value={user.role || 'user'} onChange={e => onChange({ ...user, role: e.target.value })} required className={styles.input}>
<option value="user">Пользователь</option>
<option value="admin">Администратор</option>
</select>

View File

@ -14,7 +14,7 @@ export default function EditUserModal({ isOpen, onClose, user, loading, onChange
<input type="text" value={user.name} onChange={e => onChange({ ...user, name: e.target.value })} required className={styles.input} />
</label>
<label className={styles.label}>Роль
<select value={user.role} onChange={e => onChange({ ...user, role: e.target.value })} required className={styles.input}>
<select value={user.role || 'user'} onChange={e => onChange({ ...user, role: e.target.value })} required className={styles.input}>
<option value="user">Пользователь</option>
<option value="admin">Администратор</option>
</select>

View File

@ -73,7 +73,10 @@ function UsersPage() {
};
const handleEdit = (user) => {
setEditUser(user);
setEditUser({
...user,
role: user.Role ? user.Role.name : 'user'
});
};
const handleEditSave = async (e) => {
@ -167,7 +170,7 @@ function UsersPage() {
<td className={styles.tableCell}>{u.id}</td>
<td className={styles.tableCell}>{u.email}</td>
<td className={styles.tableCell}>{u.name}</td>
<td className={styles.tableCell}>{u.role}</td>
<td className={styles.tableCell}>{u.Role ? u.Role.name : 'Неизвестно'}</td>
<td className={styles.tableCellActions}>
<button
onClick={() => handleEdit(u)}