Systems Hub
রহিম কি করিমের account-এ
ঢুকতে পারবে?
Login করলেই কি সব দেখা যায়? নাকি system জানে
কে কোথায় যেতে পারবে — এবং কেন?
JWT Token Redis Cache Permission System RBAC ১০ লাখ User
পুরো Auth System বুঝব ৩০ মিনিটে
SLIDE 01

পুরো Auth System এক নজরে

Login থেকে Permission — সব কিছু এক পথে
Browser
API Gateway
Auth Middleware
Redis Cache
Route Handler

Authentication

  • তুমি কে? — পরিচয় যাচাই
  • Email + Password → JWT Token
  • Token থেকে User বের করা

Authorization

  • তুমি কী করতে পারবে? — অধিকার যাচাই
  • Role: Admin / Teacher / Student
  • Permission: read / write / delete

Redis Cache

  • প্রতি request-এ DB query নয়
  • Token → User data RAM-এ রাখা
  • ১০ লাখ user handle করার রহস্য

Scale

  • Stateless JWT — server-এ session নেই
  • Multiple server-এও কাজ করে
  • Redis distributed cache
SLIDE 02

Authentication — তুমি কে?

পরিচয় যাচাই করার পুরো পদ্ধতি
সমস্যা: প্রতিবার DB-তে password check করলে ১০ লাখ user-এর request সামলানো যাবে না — server মরে যাবে

JWT Token কী?

  • একটা ডিজিটাল পরিচয়পত্র
  • তিন ভাগ: Header . Payload . Signature
  • Payload-এ থাকে: userId, role, expiry
  • Server verify করে — DB query নেই

Token Lifecycle

  • Access Token: ১৫ মিনিট (ছোট, fast)
  • Refresh Token: ৩০ দিন (DB-তে থাকে)
  • Access expire → Refresh দিয়ে নতুন নাও
// Login করলে const token = jwt.sign( { userId: রহিম.id, role: 'student' }, SECRET_KEY, { expiresIn: '15m' } ); // প্রতি request-এ verify const decoded = jwt.verify( token, SECRET_KEY ); // decoded = { userId: 'rahim-123', // role: 'student', exp: 1234567 }
JWT verify করতে শুধু SECRET_KEY দরকার — DB-তে যেতে হয় না। তাই ১০ লাখ request সামলানো সম্ভব।
SLIDE 03

Authorization — কে কী করতে পারবে?

RBAC: Role-Based Access Control

Role Hierarchy

Role ক্ষমতা
SuperAdmin সব কিছু
Admin User manage, Course manage
Teacher নিজের Course manage
Student শুধু পড়তে পারবে
⚠️
রহিম (Student) যদি teacher-এর route-এ ঢোকার চেষ্টা করে — ৪০৩ Forbidden। Role check ব্যর্থ।
// Permission Middleware function requireRole(...roles) { return (req, res, next) => { const { role } = req.user; if (!roles.includes(role)) { return res.status(403).json({ error: 'তোমার এখানে প্রবেশ নিষেধ' }); } next(); }; } // Route-এ ব্যবহার router.delete('/user/:id', authenticate, requireRole('admin','superadmin'), deleteUser );
SLIDE 04

নতুন User Sign Up

রহিম প্রথমবার account খুলছে

Email + Password দেয় — রহিম form fill করে submit করে

Validation — Email format ঠিক আছে? Password ৮ character-এর বেশি?

Email duplicate check — DB-তে এই email আগে আছে কিনা

bcrypt দিয়ে password hash — কখনো plain password DB-তে রাখা হয় না। hash: $2b$10$xyz...

DB-তে save — role: 'student' দিয়ে নতুন record

Access + Refresh Token generate — রহিম-কে দিয়ে দাও, সে login হয়ে গেছে

SLIDE 05

Existing User Login

করিম আবার ফিরে এসেছে

Email + Password দেয়

DB-তে email খোঁজো — পাওয়া না গেলে ৪০৪

bcrypt.compare() — দেওয়া password vs stored hash

Match? → JWT Access + Refresh Token দাও

Redis-এ user data cache করো (TTL: ১৫ মিনিট)

// Login flow const user = await db.user.findUnique({ where: { email } }); if (!user) throw new Error('User নেই'); const match = await bcrypt.compare( password, user.passwordHash ); if (!match) throw new Error('Wrong password'); // Redis-এ cache await redis.setex( `user:${user.id}`, 900, // 15 মিনিট JSON.stringify(user) ); return { accessToken, refreshToken };
SLIDE 06

Protected Route — Middleware Chain

প্রতিটা request এই পথে আসে
Request আসে
Token extract
JWT verify
Redis check
DB fallback
Route
async function authenticate(req, res, next) { const token = req.headers.authorization ?.split(' ')[1]; if (!token) return res.status(401).json( { error: 'Token নেই' } ); const decoded = jwt.verify(token, SECRET); // Redis-এ আছে? let user = await redis.get( `user:${decoded.userId}` ); if (!user) { // DB থেকে নাও + cache করো user = await db.user.findUnique( { where: { id: decoded.userId } } ); await redis.setex(`user:${user.id}`, 900, JSON.stringify(user)); } req.user = user; next(); }
৯৫% request Redis থেকে serve হয় — DB touch করে না। এই কারণে ১০ লাখ user handle সম্ভব।
Token invalid বা expire → ৪০১ Unauthorized। রহিমকে আবার login করতে হবে।

Cache Miss কখন?

  • প্রথম login-এর পর (Redis-এ নেই)
  • TTL expire হলে (১৫ মিনিট পর)
  • User data update হলে (cache invalidate)
SLIDE 07

Redis Cache — Memory-তে রাখার জাদু

Database-এ বারবার যাওয়া বন্ধ

Redis কী?

  • RAM-এ data রাখার database
  • HDD/SSD-এর চেয়ে ১০০x দ্রুত
  • Key-Value format: "user:123" → {...}
  • TTL দিলে auto expire হয়

কী কী Cache করি?

  • User info (id, email, role)
  • Permission list
  • Course access list
  • Rate limit counter

Cache Invalidation

  • User role বদলালে → cache delete
  • Password change → সব session clear
  • Logout → token blacklist Redis-এ
0.1ms
Redis response time
5-10ms
Database query time
50-100x
Redis কত গুণ দ্রুত
💡
উদাহরণ: ১ লাখ user একসাথে request পাঠাল। Redis ছাড়া → ১ লাখ DB query। Redis সহ → ৫,০০০ DB query + ৯৫,০০০ Redis hit। Server বাঁচল।
SLIDE 08

Course Access — কে কোন Course দেখতে পাবে?

জাবের কি premium course-এ ঢুকতে পারবে?

জাবের /course/456/video request পাঠায়

Authenticate middleware: জাবের কে? → Token verify

Course access check: জাবের কি এই course কিনেছে?

Redis: `enrollment:জাবের.id:course456` → YES/NO

YES → Video দেখতে পাবে। NO → Payment page-এ পাঠাও।

async function checkCourseAccess( userId, courseId ) { // Redis-এ আছে? const cacheKey = `enroll:${userId}:${courseId}`; const cached = await redis.get(cacheKey); if (cached) return cached === 'true'; // DB check const enrollment = await db.enrollment .findUnique({ where: { userId_courseId: { userId, courseId } } }); const hasAccess = !!enrollment; // Cache করো ১ ঘণ্টার জন্য await redis.setex(cacheKey, 3600, String(hasAccess)); return hasAccess; }
SLIDE 09

১০–২০ লাখ User Handle করার Strategy

ছোট system কীভাবে বড় হয়

Stateless JWT

  • Server-এ session রাখা হয় না
  • যেকোনো server request handle করতে পারে
  • নতুন server যোগ করলেই scale

Redis Cluster

  • একটা Redis → multiple Redis node
  • Data শেয়ার হয় সব node-এ
  • একটা মরলে অন্যটা চলে

Rate Limiting

  • এক IP থেকে বেশি request → block
  • Redis-এ counter রাখা হয়
  • Brute force attack বন্ধ করে
ভুল approach: Session-based auth → সব server-এ session sync করতে হয় → nightmare at scale
সঠিক approach: JWT + Redis → Server stateless, cache distributed → ১০ লাখ user, ১০০ server — সব ঠিকঠাক
SLIDE 10

যা শিখলাম — এক নজরে

Auth System-এর পুরো ছবি

Authentication

  • JWT — stateless, fast
  • bcrypt password hashing
  • Access + Refresh token pair

Authorization

  • RBAC — Role-Based Access
  • Middleware chain
  • Permission per route

Cache & Scale

  • Redis — ৯৫% DB query বাঁচায়
  • Distributed cache
  • Rate limiting protection
🎯
মনে রাখো: Authentication = কে তুমি? Authorization = কী করতে পারবে? Redis = দ্রুত উত্তর দেওয়ার চাবি।
সব একসাথে ধাপে ধাপে