Rollebaseret adgangskontrol (RBAC)
Modellér brugerroller og tilladelser, gem dem i sessionen, og håndhæv rolletjek på tværs af serverkomponenter, route handlers og middleware i en Next.js 15-app.
Rollebaseret adgangskontrol (RBAC) er en gratis Next.js 15-fullstackwebapps-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Next.js 15-fullstackwebapps, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Next.js 15-fullstackwebapps-kurset indeholder 4 lektioner i alt.
Autorisation ud over login
Godkendelse besvarer hvem er du; autorisation besvarer hvad må du gøre. Role-Based Access Control (RBAC) tildeler hver bruger en eller flere roller og giver roller tilladelser i stedet for enkeltpersoner.
- Roller:
admin,editor,viewer - Tilladelser udledes af rollen.
Lagring af rollen i JWT
Med NextAuth føjer du rollen til tokenet i jwt-callbacken, så den følger med hver forespørgsel uden et opslag i databasen.
callbacks: {
async jwt({ token, user }) {
if (user) token.role = user.role;
return token;
},
async session({ session, token }) {
session.user.role = token.role;
return session;
},
}Et tilladelseskort
Centralisér, hvad hver rolle må gøre. Et enkelt kort holder kontrollerne ensartede og nemme at revidere.
export const permissions = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read'],
};
export function can(role, action) {
return permissions[role]?.includes(action) ?? false;
}Test af hjælpefunktionen
Hjælpefunktionen can indeholder ren logik, så den kan køre hvor som helst. Her er en selvstændig kontrol.
const permissions = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read'],
};
function can(role, action) {
return permissions[role]?.includes(action) ?? false;
}
console.log(can('editor', 'write'));
console.log(can('viewer', 'delete'));Beskyttelse af en Server Component
Læs sessionen på serveren, og omdirigér brugere, der mangler den krævede rolle, før følsom brugerflade vises.
import { auth } from '@/auth';
import { redirect } from 'next/navigation';
export default async function AdminPage() {
const session = await auth();
if (session?.user.role !== 'admin') redirect('/');
return <h1>Admin Dashboard</h1>;
}Beskyttelse af en rutehåndtering
API-rutehåndteringer skal også håndhæve roller. Stol aldrig på klienten. Returnér 403, når rollen ikke er tilstrækkelig.
import { auth } from '@/auth';
import { can } from '@/lib/rbac';
export async function DELETE(req) {
const session = await auth();
if (!can(session?.user.role, 'delete')) {
return new Response('Forbidden', { status: 403 });
}
return Response.json({ ok: true });
}Rollekontroller i middleware
Middleware kan blokere hele rutegrupper tidligt. Match et admin-præfiks, og kontrollér tokenets rolle.
import { NextResponse } from 'next/server';
export function middleware(req) {
const role = req.cookies.get('role')?.value;
if (req.nextUrl.pathname.startsWith('/admin') && role !== 'admin') {
return NextResponse.redirect(new URL('/login', req.url));
}
return NextResponse.next();
}
export const config = { matcher: ['/admin/:path*'] };Forsvar i dybden
Anvend kontroller på flere lag. Middleware giver en hurtig første port, men kontrollér altid igen i den Server Component eller rutehåndtering, der faktisk tilgår data.
- Middleware: grov ruteport.
- Server Component / håndtering: autoritativ kontrol.
Betinget skjul af brugerflade
Skjul kontroller, som brugerne ikke kan bruge, men husk, at skjul af brugerfladen er bekvemmelighed og ikke sikkerhed. Serveren skal stadig afvise uautoriserede handlinger.
export default async function Toolbar() {
const session = await auth();
return (
<div>
{can(session?.user.role, 'delete') && <DeleteButton />}
</div>
);
}Flere roller og scopes
Rigtige apps giver ofte en bruger flere roller eller detaljerede scopes. Gem et array, og kontrollér medlemskab. Det kan senere skaleres mod tilladelsesbaserede (ABAC) systemer.
function hasRole(userRoles, required) {
return userRoles.some((r) => r === required);
}
console.log(hasRole(['editor', 'viewer'], 'editor'));Almindelige faldgruber
Undgå disse RBAC-fejl:
- At stole på en rolle, der sendes fra klientens body.
- Kun at kontrollere roller i brugerfladen.
- At glemme at udstede JWT igen efter en ændring af rollen.
- At hardkode rollestrenge i stedet for at bruge et centralt kort.
Hurtigt tjek
Hvor er det autoritative sted at håndhæve, at kun administratorer må slette en post?
Opsummering
Du har implementeret RBAC fra ende til anden:
- Gemt rollen i JWT og sessionen via NextAuth-callbacks.
- Centraliseret tilladelser med hjælpefunktionen
can(). - Beskyttet Server Components, rutehåndteringer og middleware.
- Anvendt forsvar i dybden og undgået faldgruber ved at stole på klienten.
Lær TypeScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Rollebaseret adgangskontrol (RBAC)” gratis?
Ja — alle 3 lektioner i læringssporet Next.js 15-fullstackwebapps, inklusive “Rollebaseret adgangskontrol (RBAC)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Next.js 15-fullstackwebapps-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Rollebaseret adgangskontrol (RBAC)”?
Modellér brugerroller og tilladelser, gem dem i sessionen, og håndhæv rolletjek på tværs af serverkomponenter, route handlers og middleware i en Next.js 15-app. Du øver dig i Next.js 15-fullstackwebapps med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Next.js 15-fullstackwebapps?
Der kræves ingen tidligere erfaring. Next.js 15-fullstackwebapps på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Rollebaseret adgangskontrol (RBAC)”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Next.js 15-fullstackwebapps-lektion?
Ja. Alle Next.js 15-fullstackwebapps-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Integration af NextAuth.js
- Sessionshåndtering og JWT'er
- Middleware og adgangskontrol
- Rollebaseret adgangskontrol (RBAC)