fix create and update user
This commit is contained in:
parent
89aa18bb4f
commit
5c42f03e47
@ -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 });
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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)}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user