Auth — нюанси для виправлення
Глобальний опис auth-шарів — у root CONVENTIONS / архітектурній доці. Тут — лише дивні моменти academy які треба виправити (а потім видалити цей файл).
Що поправити
AuthGuard.canActivateповертаєtrueнавіть з помилкою токена. У коді стоїть коментар-сумнів// Помилка токена не зупиняє виконання ???(src/auth/guards/auth.guard.ts). Реальний захист тільки на ролях. Або зробитиreturn falseдля невалідного токена, або прибратиAuthGuardзовсім (AuthMiddlewareвсе одно кладеreq.user).RolesGuardкидаєForbiddenException→ HTTP 403. В решті стеку (golden) — HTTP 400 +{success:false, message:'Not allow role'}. Розбіжність контракту з фронтом.- Без
@ApiRolesендпоінт публічний. RolesGuard пропускає всіх якщо нема metadata'roles'. Безпечний дефолт мав би бути «default deny». Поки — потрібен code-review кожного нового ендпоінта. - Помилки кидаються як 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)). Не впливає на доступ.