Auth
src/auth/
Захист ендпоінтів. Defense in depth: @UseGuards(AuthGuard, RolesGuard) на контролері + @ApiRoles([роли], options?) на ендпоінті.
Що це
- AuthGuard — читає
Authorization: Bearer <jwt>, прокидаєreq.user. Сам зараз завжди повертаєtrue(опціональний валідатор, не gate). - RolesGuard — читає
'roles'метадату з handler. Без@ApiRolesпропускає — тобто@UseGuards(RolesGuard)без декоратора нічого не закриває. Це найважливіший нюанс — забутий@ApiRolesробить ендпоінт публічним. @ApiRoles(roles, options?)— комбінуєRoles(...)+ApiOperation(...). Додає**Доступно для ролей:** ...у Swagger description.
Розподіл доступу за групами
- Legend —
director,topManager - tips-memory — POST захищені роллю
operator; GET (health/status) публічні - Module
legendзагалом — для системних викликів зі stack - Module
tips-memoryзагалом — для електронного клієнта оператора
Нюанси
- Не використовуй окремий
@ApiOperationпоряд із@ApiRoles— він перетре опис. - Конвенція відповідей: усі ендпоінти повертають HTTP 200 з body
{success, data, message?}. Реальний код помилки губиться в HTTP-status. Це проєктна legacy-конвенція AllExceptionsFilter. Не намагайся повертати реальні 4xx/5xx — це поламає клієнтів.