Role Dayalı Erişim Denetimi (RBAC)
Kullanıcı rollerini ve izinlerini modelleyin, bunları oturumda saklayın ve bir Next.js 15 uygulamasında sunucu bileşenleri, rota işleyicileri ve ara yazılımlar boyunca rol denetimlerini zorunlu kılın.
Role Dayalı Erişim Denetimi (RBAC), CoddyKit'te ücretsiz bir Next.js 15 Fullstack Web Apps dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Next.js 15 Fullstack Web Apps öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Next.js 15 Fullstack Web Apps kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
Authorization Beyond Login
Authentication answers who are you; authorization answers what may you do. Role-Based Access Control (RBAC) assigns each user one or more roles and grants permissions to roles instead of individuals.
- Roles:
admin,editor,viewer - Permissions are derived from the role.
Storing the Role in the JWT
With NextAuth, attach the role to the token in the jwt callback so it travels with every request without a database hit.
callbacks: {
async jwt({ token, user }) {
if (user) token.role = user.role;
return token;
},
async session({ session, token }) {
session.user.role = token.role;
return session;
},
}A Permissions Map
Centralize what each role can do. A simple map keeps checks consistent and easy to audit.
export const permissions = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read'],
};
export function can(role, action) {
return permissions[role]?.includes(action) ?? false;
}Testing the Helper
The can helper is pure logic, so it runs anywhere. Here is a self-contained check.
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'));Guarding a Server Component
Read the session on the server and redirect users who lack the required role before any sensitive UI renders.
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>;
}Guarding a Route Handler
API route handlers must enforce roles too. Never trust the client. Return 403 when the role is insufficient.
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 });
}Role Checks in Middleware
Middleware can block whole route groups early. Match an admin prefix and verify the token's role.
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*'] };Defense in Depth
Apply checks at multiple layers. Middleware gives a fast first gate, but always re-verify in the server component or route handler that actually touches data.
- Middleware: coarse routing gate.
- Server component / handler: authoritative check.
Hiding UI Conditionally
Hide controls users cannot use, but remember UI hiding is convenience, not security. The server must still reject unauthorized actions.
export default async function Toolbar() {
const session = await auth();
return (
<div>
{can(session?.user.role, 'delete') && <DeleteButton />}
</div>
);
}Multiple Roles and Scopes
Real apps often give a user several roles or fine-grained scopes. Store an array and check membership. This scales toward permission-based (ABAC) systems later.
function hasRole(userRoles, required) {
return userRoles.some((r) => r === required);
}
console.log(hasRole(['editor', 'viewer'], 'editor'));Common Pitfalls
Avoid these RBAC mistakes:
- Trusting a role sent from the client body.
- Checking roles only in the UI.
- Forgetting to re-issue the JWT after a role change.
- Hardcoding role strings instead of a central map.
Quick Check
Where is the authoritative place to enforce that only admins can delete a record?
Recap
You implemented RBAC end to end:
- Stored the role in the JWT and session via NextAuth callbacks.
- Centralized permissions with a
can()helper. - Guarded server components, route handlers, and middleware.
- Applied defense in depth and avoided client-trust pitfalls.
Yapay zeka eğitmeniyle TypeScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 12
- Dersler
- 48
Sıkça Sorulan Sorular
“Role Dayalı Erişim Denetimi (RBAC)” dersi ücretsiz mi?
Evet — “Role Dayalı Erişim Denetimi (RBAC)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Next.js 15 Fullstack Web Apps kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Next.js 15 Fullstack Web Apps kursu toplamda 4 dersten oluşur.
“Role Dayalı Erişim Denetimi (RBAC)” dersinde ne öğreneceğim?
Kullanıcı rollerini ve izinlerini modelleyin, bunları oturumda saklayın ve bir Next.js 15 uygulamasında sunucu bileşenleri, rota işleyicileri ve ara yazılımlar boyunca rol denetimlerini zorunlu kılın. Next.js 15 Fullstack Web Apps ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Next.js 15 Fullstack Web Apps öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Next.js 15 Fullstack Web Apps, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Role Dayalı Erişim Denetimi (RBAC)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Next.js 15 Fullstack Web Apps dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Next.js 15 Fullstack Web Apps dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- NextAuth.js Entegrasyonu
- Oturum Yönetimi ve JWT'ler
- Ara Katman Yazılımı ve Erişim Denetimi
- Role Dayalı Erişim Denetimi (RBAC)