auth

Auth — нюанси для виправлення

Глобальний опис auth-шарів — у root CONVENTIONS / архітектурній доці. Тут — лише дивні моменти academy які треба виправити (а потім видалити цей файл).

Що поправити

  1. AuthGuard.canActivate повертає true навіть з помилкою токена. У коді стоїть коментар-сумнів // Помилка токена не зупиняє виконання ??? (src/auth/guards/auth.guard.ts). Реальний захист тільки на ролях. Або зробити return false для невалідного токена, або прибрати AuthGuard зовсім (AuthMiddleware все одно кладе req.user).
  2. RolesGuard кидає ForbiddenException → HTTP 403. В решті стеку (golden) — HTTP 400 + {success:false, message:'Not allow role'}. Розбіжність контракту з фронтом.
  3. Без @ApiRoles ендпоінт публічний. RolesGuard пропускає всіх якщо нема metadata 'roles'. Безпечний дефолт мав би бути «default deny». Поки — потрібен code-review кожного нового ендпоінта.
  4. Помилки кидаються як plain new Error(...) (наприклад Course with id ... does not exist in db!, You can't edit course! тощо у всіх сервісах). AllExceptionsFilter перетворює це на HTTP 500. У golden норма — HTTPError(code, msg) з конкретним 4xx (400/404). Треба переписати на HttpException з коректними HTTP-кодами по всіх сервісах academy.

Опис (для контексту)

  • @ApiRoles([...]) (src/auth/decorators/api-roles.decorator.ts) — combo @Roles(...) + @ApiOperation({description}). Реєструє ролі для гварду + автоматично описує у Swagger.
  • OperatorOnlineMiddleware (src/common/middlewares/operator-online.middleware.ts) — для req.user.role === operator пише ONLINE_USERS_KEY у Redis (hSet(timestamp)). Не впливає на доступ.