fetch возвращает Response, а не объект пользователя: нужны проверка response.ok и await response.json(). Пароль нельзя включать в клиентский результат; права должны подтверждаться сервером.
Обнаружить баги в функции получения данных пользователя
fetch возвращает Response, а не объект пользователя: нужны проверка response.ok и await response.json(). Пароль нельзя включать в клиентский результат; права должны подтверждаться сервером.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В этом задании требуется проанализировать функцию и найти в ней ошибки. Обратите внимание на работу с асинхронным запросом, условные конструкции и формирование массива прав.
export async function getUserData(userId) {
const fetchedUser = await fetch(`/api/users/${userId}`);
const permissionsMap = { reportStats: true, validate: true };
let result;
switch (true) {
case fetchedUser.role == 'admin':
result = {
name: fetchedUser.name,
role: fetchedUser.role,
password: fetchedUser.password,
permissions: [],
};
Object.keys(permissionsMap).forEach(perm => {
if (permissionsMap[perm]) {
if (perm === 'reportStats') {
result.permissions.push('report-stats');
} else {
result.permissions.push(perm);
}
}
});
break;
case fetchedUser.role == 'regular':
result = {
name: fetchedUser.name,
role: fetchedUser.role,
};
}
return result;
}
Ответ
fetch возвращает Response, а не объект пользователя: нужны проверка response.ok и await response.json(). Пароль нельзя включать в клиентский результат; права должны подтверждаться сервером.
async function getUserData(userId) {
const response = await fetch('/api/users/' + encodeURIComponent(userId));
if (!response.ok) throw new Error('Не удалось загрузить пользователя');
const user = await response.json();
if (!['admin', 'regular'].includes(user.role)) throw new Error('Неизвестная роль');
return {
name: user.name,
role: user.role,
permissions: user.role === 'admin' ? ['report-stats', 'validate'] : []
};
}
Этот список permissions воспроизводит UI-логику примера, не является механизмом авторизации. Сервер обязан самостоятельно проверять доступ и вообще не возвращать пароль/хеш в API. switch(true) синтаксически допустим, но здесь избыточен; также исходник возвращал undefined для неизвестной роли.