From b221a83ecef1dd7f9583d5107017d24e668205a6 Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Thu, 2 Jul 2026 20:17:44 +0530 Subject: Added React global state + role based security sample app --- .../08-auth-with-context/src/components/Navbar.jsx | 67 ++++++++++++++++++++++ .../src/components/RoleGuard.jsx | 15 +++++ 2 files changed, 82 insertions(+) create mode 100644 react/08-auth-with-context/src/components/Navbar.jsx create mode 100644 react/08-auth-with-context/src/components/RoleGuard.jsx (limited to 'react/08-auth-with-context/src/components') diff --git a/react/08-auth-with-context/src/components/Navbar.jsx b/react/08-auth-with-context/src/components/Navbar.jsx new file mode 100644 index 0000000..9697c73 --- /dev/null +++ b/react/08-auth-with-context/src/components/Navbar.jsx @@ -0,0 +1,67 @@ +import { Link, NavLink } from "react-router"; +import { useAuth } from "../contexts/AuthContext" +import RoleGuard from "./RoleGuard"; + +const Navbar = () => { + const {user, login, logout, isLoggedIn} = useAuth(); + + return ( + + ) +} + +export default Navbar \ No newline at end of file diff --git a/react/08-auth-with-context/src/components/RoleGuard.jsx b/react/08-auth-with-context/src/components/RoleGuard.jsx new file mode 100644 index 0000000..5585908 --- /dev/null +++ b/react/08-auth-with-context/src/components/RoleGuard.jsx @@ -0,0 +1,15 @@ +import { useAuth } from '../contexts/AuthContext'; + +const RoleGuard = ({ allowedRoles, children }) => { + const { isInRoles } = useAuth(); + + // If at least one of the user's role is in the allowed list, show the content + if (isInRoles(allowedRoles)) { + return <>{children}; + } + + // Otherwise, hide the content + return null; +}; + +export default RoleGuard; \ No newline at end of file -- cgit v1.2.3