Node.js / NestJS

āļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ° RBAC

āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ•āļēāļĄāļšāļ—āļšāļēāļ—, custom guard, decorator, āļŠāļīāļ—āļ˜āļīāđŒ, āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢ

20 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Mid-Level
1

RBAC (Role-Based Access Control) āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

RBAC āļ„āļ·āļ­āļĢāļ°āļšāļšāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ—āļĩāđˆāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđāļāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļ•āļēāļĄāļšāļ—āļšāļēāļ—āļ‚āļ­āļ‡āļžāļ§āļāđ€āļ‚āļē āđāļ—āļ™āļ—āļĩāđˆāļˆāļ°āļˆāļąāļ”āļāļēāļĢāļŠāļīāļ—āļ˜āļīāđŒāđāļĒāļāļāļąāļ™āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āđāļ•āđˆāļĨāļ°āļĢāļēāļĒ RBAC āļˆāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄāļŠāļīāļ—āļ˜āļīāđŒāđ„āļ§āđ‰āđƒāļ™āļšāļ—āļšāļēāļ— (āđ€āļŠāđˆāļ™ ADMIN, USER, MANAGER) āđāļĨāļ°āļāļģāļŦāļ™āļ”āļšāļ—āļšāļēāļ—āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āđƒāļŦāđ‰āļāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰ āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđƒāļ™āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āđ‚āļ”āļĒāļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđƒāļ™ NestJS āđ€āļĄāļ·āđˆāļ­āđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļš custom guard āđāļĨāļ° decorator āļ‚āļ­āļ‡ metadata

2

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™ (authentication) āđāļĨāļ°āļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒ (authorization) āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ•āļąāļ§āļ•āļ™āļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (āļ„āļļāļ“āļ„āļ·āļ­āđƒāļ„āļĢ?) āđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āļœāđˆāļēāļ™āļāļēāļĢāļĨāđ‡āļ­āļāļ­āļīāļ™/āļĢāļŦāļąāļŠāļœāđˆāļēāļ™ āļŦāļĢāļ·āļ­ JWT token āļŠāđˆāļ§āļ™āļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (āļ„āļļāļ“āļ—āļģāļ­āļ°āđ„āļĢāđ„āļ”āđ‰āļšāđ‰āļēāļ‡?) āđ‚āļ”āļĒāļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢāļ•āļēāļĄāļšāļ—āļšāļēāļ—āļŦāļĢāļ·āļ­āļŠāļīāļ—āļ˜āļīāđŒ āđƒāļ™ NestJS āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļĄāļąāļāđƒāļŠāđ‰ JwtAuthGuard āļ‚āļ“āļ°āļ—āļĩāđˆāļāļēāļĢāđƒāļŦāđ‰āļŠāļīāļ—āļ˜āļīāđŒāđƒāļŠāđ‰ custom guard āđ€āļŠāđˆāļ™ RolesGuard āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡

3

decorator āļ‚āļ­āļ‡ NestJS āļ•āļąāļ§āđƒāļ”āļ—āļĩāđˆāđƒāļŠāđ‰āļŠāļĢāđ‰āļēāļ‡ custom guard āđ„āļ”āđ‰?

āļ„āļģāļ•āļ­āļš

āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ custom guard āđƒāļ™ NestJS āđƒāļŦāđ‰āļŠāļĢāđ‰āļēāļ‡āļ„āļĨāļēāļŠāļ—āļĩāđˆāļ•āļāđāļ•āđˆāļ‡āļ”āđ‰āļ§āļĒ @Injectable() āļ‹āļķāđˆāļ‡āđƒāļŠāđ‰āļ‡āļēāļ™ interface CanActivate interface āļ™āļĩāđ‰āļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āļĄāļĩāđ€āļĄāļ˜āļ­āļ” canActivate(context: ExecutionContext) āļ—āļĩāđˆāļ„āļ·āļ™āļ„āđˆāļēāđ€āļ›āđ‡āļ™ boolean āļŦāļĢāļ·āļ­ Promise āļˆāļēāļāļ™āļąāđ‰āļ™ guard āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļāļąāļš route āđ„āļ”āđ‰āļ”āđ‰āļ§āļĒ @UseGuards() āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ– inject dependency (service, repository) āđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļ™ guard āđ€āļžāļ·āđˆāļ­āļ—āļģāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđ„āļ”āđ‰

4

āđƒāļ™ RBAC 'permission' (āļŠāļīāļ—āļ˜āļīāđŒ) āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ­āļ°āđ„āļĢ?

5

āļˆāļ°āđāļ™āļš guard āđ€āļ‚āđ‰āļēāļāļąāļš controller āđƒāļ™ NestJS āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

+17 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Node.js

Junior
20 āļ„āļģāļ–āļēāļĄ

Core API āļ‚āļ­āļ‡ Node.js

Junior
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđāļšāļšāļ­āļ°āļ‹āļīāļ‡āđ‚āļ„āļĢāļ™āļąāļŠ

Junior
25 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Express.js

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ NestJS

Junior
23 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļ­āļāđāļšāļš REST API

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĨāļ° DTO

Junior
20 āļ„āļģāļ–āļēāļĄ

āđ€āļ­āļāļŠāļēāļĢ API āđāļĨāļ° Contract

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŦāļ™āđˆāļ§āļĒ (Unit Testing)

Junior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļ•āļēāļĢāļēāļ‡āļ‡āļēāļ™

Junior
15 āļ„āļģāļ–āļēāļĄ

Module āđāļĨāļ° DI āļ‚āļ­āļ‡ NestJS

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļ”āđ‰āļ§āļĒ JWT

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ”āđ‰āļ§āļĒ TypeORM

Mid-Level
30 āļ„āļģāļ–āļēāļĄ

Prisma ORM

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Middleware āđāļĨāļ° Interceptor

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒ

Mid-Level
15 āļ„āļģāļ–āļēāļĄ

WebSockets

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

GraphQL āļāļąāļš NestJS

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđāļšāļš End-to-End

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđāļ„āļŠāļ”āđ‰āļ§āļĒ Redis

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļ„āļīāļ§āļ”āđ‰āļ§āļĒ Bull

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

DevOps, Logging āđāļĨāļ° CI/CD

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

Docker āđāļĨāļ° Containerization

Mid-Level
25 āļ„āļģāļ–āļēāļĄ

āđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ

Senior
30 āļ„āļģāļ–āļēāļĄ

āđāļ™āļ§āļ—āļēāļ‡āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ

Senior
25 āļ„āļģāļ–āļēāļĄ

āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļāļēāļĢ Deploy āļšāļ™ Cloud

Senior
30 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Node.js / NestJS āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ