Concept Flow - Role-based access patterns
User Requests Page
Check User Role
Allow Admin
Render Page
This flow shows how a Next.js app checks a user's role before allowing access to a page or redirecting them.
import { NextResponse } from 'next/server'; export function middleware(req) { const role = req.cookies.get('role')?.value || 'guest'; if (role === 'admin') return NextResponse.next(); return NextResponse.redirect(new URL('/login', req.url)); }
| Step | Action | Role Value | Condition Checked | Result | Next Step |
|---|---|---|---|---|---|
| 1 | Read 'role' cookie | admin | role === 'admin' | True | Allow access |
| 2 | Allow access | admin | - | Access granted | Render page |
| 3 | User requests page | user | role === 'admin' | False | Redirect to /login |
| 4 | Redirect to /login | user | - | Access denied | Show login page |
| 5 | User requests page | guest | role === 'admin' | False | Redirect to /login |
| 6 | Redirect to /login | guest | - | Access denied | Show login page |
| Variable | Start | After Step 1 | After Step 3 | After Step 5 |
|---|---|---|---|---|
| role | undefined | admin | user | guest |
Role-based access in Next.js uses middleware to check user roles. It reads the role from cookies or defaults to 'guest'. If role matches allowed roles (e.g., 'admin'), access is granted. Otherwise, user is redirected to login or error page. This pattern protects pages based on user permissions.