This commit is contained in:
Professional 2025-05-25 23:36:51 +07:00
parent bed201fafd
commit 03e234b356
4 changed files with 41 additions and 7 deletions

View File

@ -4,16 +4,27 @@
* который добавляет req.user
*/
const adminMiddleware = (req, res, next) => {
console.log('[DEBUG] adminMiddleware - Проверка прав администратора');
// Проверяем, есть ли пользователь (должен быть добавлен в middleware авторизации)
if (!req.user) {
console.log('[DEBUG] adminMiddleware - req.user не найден, пользователь не авторизован');
return res.status(401).json({ message: 'Не авторизован' });
}
console.log('[DEBUG] adminMiddleware - Пользователь:', {
id: req.user._id,
email: req.user.email,
isAdmin: req.user.isAdmin
});
// Проверяем, является ли пользователь администратором
if (!req.user.isAdmin) {
console.log('[DEBUG] adminMiddleware - Доступ запрещен. У пользователя нет прав администратора');
return res.status(403).json({ message: 'Доступ запрещен. Требуются права администратора' });
}
console.log('[DEBUG] adminMiddleware - Пользователь является администратором, доступ разрешен');
// Если пользователь администратор, продолжаем выполнение запроса
next();
};

View File

@ -47,6 +47,14 @@ const protect = async (req, res, next) => {
return next(err);
}
// Добавляем отладочное логирование для проверки прав администратора
console.log('[DEBUG] protect middleware - User loaded:', {
id: req.user._id,
name: req.user.name,
email: req.user.email,
isAdmin: req.user.isAdmin
});
console.log('[DEBUG] protect middleware - User authenticated, calling next()');
next();
} catch (error) {

View File

@ -34,10 +34,15 @@ async function fetchUser() {
throw new Error('Неверный формат ответа от сервера');
}
// Добавляем дополнительное логирование для отладки
console.log('Получены данные пользователя:', response.data);
console.log('Значение isAdmin в ответе:', response.data.isAdmin);
// Сохраняем данные пользователя
user.value = response.data;
console.log('Пользователь успешно загружен:', user.value);
console.log('isAuthenticated после загрузки пользователя:', isAuthenticated.value);
console.log('Пользователь является администратором:', user.value.isAdmin ? 'Да' : 'Нет');
} catch (error) {
console.error('Не удалось загрузить пользователя по токену:', error.response ? error.response.data : error.message);
// Если токен невалиден, очищаем его и данные пользователя

View File

@ -111,43 +111,53 @@ const router = createRouter({
router.beforeEach(async (to, from, next) => {
const { isAuthenticated, token, user, fetchUser } = useAuth(); // Получаем функции и состояния аутентификации
console.log('[ROUTER GUARD] Навигация: от', from.path, 'к', to.path);
console.log('[ROUTER GUARD] Текущий пользователь:', user.value);
console.log('[ROUTER GUARD] isAuthenticated:', isAuthenticated.value);
console.log('[ROUTER GUARD] Есть токен:', !!token.value);
// Проверяем наличие токена в localStorage
const hasToken = !!token.value;
// Если есть токен в localStorage и нет данных пользователя, пробуем загрузить данные
if (hasToken && !user.value) {
console.log('[Router Guard] Найден токен, но нет данных пользователя. Загружаем данные...');
console.log('[ROUTER GUARD] Найден токен, но нет данных пользователя. Загружаем данные...');
try {
await fetchUser();
console.log('[ROUTER GUARD] Данные пользователя загружены:', user.value);
console.log('[ROUTER GUARD] Пользователь является администратором:', user.value?.isAdmin ? 'Да' : 'Нет');
} catch (error) {
console.error('[Router Guard] Ошибка при загрузке данных пользователя:', error);
console.error('[ROUTER GUARD] Ошибка при загрузке данных пользователя:', error);
}
}
// Проверка прав администратора
if (to.meta.requiresAdmin && (!user.value || !user.value.isAdmin)) {
console.log(`[Router Guard] Доступ к ${to.path} запрещен. Требуются права администратора.`);
console.log(`[ROUTER GUARD] Доступ к ${to.path} запрещен. Требуются права администратора.`);
console.log('[ROUTER GUARD] Текущий пользователь:', user.value);
console.log('[ROUTER GUARD] isAdmin:', user.value?.isAdmin);
return next({ name: 'Swipe' }); // Перенаправление на обычную страницу пользователей
}
// Проверяем требования маршрута к авторизации
if (to.meta.requiresAuth) {
if (isAuthenticated.value) {
console.log(`[Router Guard] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`);
console.log(`[ROUTER GUARD] Доступ к ${to.path} разрешен. Пользователь аутентифицирован.`);
next(); // Пользователь аутентифицирован, можно продолжать навигацию
} else {
// Если пользователь не аутентифицирован и страница требует авторизации
console.log(`[Router Guard] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`);
console.log(`[ROUTER GUARD] Доступ к ${to.path} запрещен. Пользователь не аутентифицирован. Перенаправление на /login.`);
next({ name: 'Login' });
}
}
else if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated.value) {
// Если пользователь уже аутентифицирован и пытается зайти на страницы авторизации
if (user.value && user.value.isAdmin) {
console.log(`[Router Guard] Админ аутентифицирован. Перенаправление с ${to.path} на админ-панель.`);
console.log(`[ROUTER GUARD] Админ аутентифицирован. Перенаправление с ${to.path} на админ-панель.`);
console.log('[ROUTER GUARD] isAdmin:', user.value.isAdmin);
next({ name: 'AdminDashboard' }); // Перенаправляем на админ-панель для админа
} else {
console.log(`[Router Guard] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`);
console.log(`[ROUTER GUARD] Пользователь аутентифицирован. Перенаправление с ${to.path} на /swipe.`);
next({ name: 'Swipe' }); // Перенаправляем на страницу свайпов для обычных пользователей
}
}