Protected Screen ও Role Based Access

🔐 React Native (TypeScript) এ File-based Protected Screen ও Role Based Access Control

একটি প্রফেশনাল React Native অ্যাপে সব স্ক্রিন সবাই দেখতে পারবে না। যেমন – Admin Dashboard শুধুমাত্র Admin দেখবে, কিন্তু User দেখবে না। এই সমস্যার সমাধানই হলো Protected Screen এবং Role Based Access Control (RBAC)


📁 File-based Routing কী?

File-based Routing মানে হলো ফোল্ডার ও ফাইলের নাম অনুযায়ী স্ক্রিন কন্ট্রোল করা। React Native-এ সাধারণত আমরা এই কনসেপ্টটি ব্যবহার করি:

  • auth → Login / Register
  • user → Normal User Screens
  • admin → Admin Screens
  • protected → Login ছাড়া অ্যাক্সেস নেই

🗂️ Recommended Folder Structure (TypeScript)

src/
 ├─ auth/
 │   └─ LoginScreen.tsx
 ├─ admin/
 │   └─ AdminDashboard.tsx
 ├─ user/
 │   └─ UserDashboard.tsx
 ├─ navigation/
 │   └─ ProtectedRoute.tsx
 ├─ context/
 │   └─ AuthContext.tsx
 └─ App.tsx
  

🔑 AuthContext তৈরি (User + Role Store)

প্রথমে আমরা একটি AuthContext তৈরি করবো যেখানে থাকবে: Login status এবং User Role।

import React, { createContext, useState, ReactNode } from 'react';

type UserRole = 'admin' | 'user' | null;

interface AuthContextType {
  isLoggedIn: boolean;
  role: UserRole;
  login: (role: UserRole) => void;
  logout: () => void;
}

export const AuthContext = createContext({
  isLoggedIn: false,
  role: null,
  login: () => {},
  logout: () => {},
});

export const AuthProvider = ({ children }: { children: ReactNode }) => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  const [role, setRole] = useState(null);

  const login = (userRole: UserRole) => {
    setIsLoggedIn(true);
    setRole(userRole);
  };

  const logout = () => {
    setIsLoggedIn(false);
    setRole(null);
  };

  return (
    
      {children}
    
  );
};
  

🛡️ ProtectedRoute তৈরি (Role Based)

এই কম্পোনেন্ট চেক করবে:
✔ User logged in কিনা
✔ User-এর role allowed কিনা

import React, { useContext } from 'react';
import { View, Text } from 'react-native';
import { AuthContext } from '../context/AuthContext';

interface Props {
  children: JSX.Element;
  allowedRole: 'admin' | 'user';
}

const ProtectedRoute = ({ children, allowedRole }: Props) => {
  const { isLoggedIn, role } = useContext(AuthContext);

  if (!isLoggedIn) {
    return Please Login First;
  }

  if (role !== allowedRole) {
    return Access Denied;
  }

  return children;
};

export default ProtectedRoute;
  

🧑‍💼 Admin Screen Protect করা


  

  

👉 এখানে শুধুমাত্র Admin এই স্ক্রিন দেখতে পারবে।

👤 User Screen Protect করা


  

  

📱 Output Behavior (Real Life Example)

  • User logged out → Please Login First
  • User role = user → Admin screen → Access Denied
  • User role = admin → Admin screen → Screen Visible

⭐ কেন এই প্যাটার্ন ব্যবহার করবেন?

  • Clean & scalable architecture
  • Large app-এর জন্য perfect
  • Security improve হয়
  • Future role add করা সহজ

✅ Summary

React Native (TypeScript)-এ File-based Protected Screen ও Role Based Access ব্যবহার করলে আপনার অ্যাপ হবে secure, professional এবং scalable। এটি real-world production app-এর জন্য অত্যন্ত গুরুত্বপূর্ণ।

👼 Quiz
/

লোড হচ্ছে...

Interview Questions:

1. Protected screen কী?

Login ছাড়া অ্যাক্সেস করা যায় না।

2. Role based access কী?

User role অনুযায়ী permission।

3. Protected route কেন দরকার?

Security নিশ্চিত করার জন্য।