Roolipohjainen käyttöoikeuksien hallinta (RBAC)
Mallintakaa käyttäjäroolit ja käyttöoikeudet, tallentakaa ne sessioon ja valvokaa rooleja palvelinkomponenteissa, route handlereissa ja middlewaressä Next.js 15 -sovelluksessa.
Roolipohjainen käyttöoikeuksien hallinta (RBAC) on ilmainen Next.js 15 -täyden pinon verkkosovellukset-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Next.js 15 -täyden pinon verkkosovellukset-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Next.js 15 -täyden pinon verkkosovellukset-kurssilla on yhteensä 4 oppituntia.
Kirjautumista pidemmälle ulottuva valtuutus
Todennus vastaa kysymykseen kuka olet, kun taas valtuutus vastaa kysymykseen mitä saat tehdä. Role-Based Access Control (RBAC) määrittää kullekin käyttäjälle yhden tai useita rooleja ja myöntää käyttöoikeudet rooleille yksittäisten käyttäjien sijaan.
- Roolit:
admin,editor,viewer - Käyttöoikeudet määräytyvät roolin perusteella.
Roolin tallentaminen JWT:hen
NextAuthia käyttäessänne liittäkää rooli tokeniin jwt-callbackissa, jotta se kulkee jokaisen pyynnön mukana ilman tietokantakyselyä.
callbacks: {
async jwt({ token, user }) {
if (user) token.role = user.role;
return token;
},
async session({ session, token }) {
session.user.role = token.role;
return session;
},
}Käyttöoikeuskartta
Keskittäkää tiedot siitä, mitä kukin rooli voi tehdä. Yksinkertainen kartta pitää tarkistukset yhdenmukaisina ja helposti auditoitavina.
export const permissions = {
admin: ['read', 'write', 'delete'],
editor: ['read', 'write'],
viewer: ['read'],
};
export function can(role, action) {
return permissions[role]?.includes(action) ?? false;
}Helper-funktion testaaminen
can-helper on puhdasta logiikkaa, joten sitä voi suorittaa missä tahansa. Tässä on itsenäinen tarkistus.
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'));Server Componentin suojaaminen
Lukekaa sessio palvelimella ja uudelleenohjatkaa käyttäjät, joilta vaadittu rooli puuttuu, ennen kuin arkaluonteista käyttöliittymää renderöidään.
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>;
}Route Handlerin suojaaminen
Myös API-reittien käsittelijöiden on valvottava rooleja. Älkää koskaan luottako asiakkaaseen. Palauttakaa 403, kun rooli ei riitä.
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 });
}Roolitarkistukset Middleware-komponentissa
Middleware voi estää kokonaisia reittiryhmiä jo varhaisessa vaiheessa. Kohdistakaa tarkistus admin-etuliitteeseen ja varmistakaa tokenin rooli.
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*'] };Usean tason suojaus
Tehkää tarkistukset usealla tasolla. Middleware tarjoaa nopean ensimmäisen portin, mutta tarkistakaa käyttöoikeus aina uudelleen siinä Server Componentissa tai Route Handlerissa, joka käsittelee tietoja.
- Middleware: karkea reitityksen portinvartija.
- Server Component / handler: auktoritatiivinen tarkistus.
Käyttöliittymän ehdollinen piilottaminen
Piilottakaa ohjaimet, joita käyttäjät eivät voi käyttää, mutta muistakaa, että käyttöliittymän piilottaminen on käyttömukavuutta, ei tietoturvaa. Palvelimen on silti hylättävä luvattomat toiminnot.
export default async function Toolbar() {
const session = await auth();
return (
<div>
{can(session?.user.role, 'delete') && <DeleteButton />}
</div>
);
}Useat roolit ja scopet
Tuotantosovelluksissa käyttäjällä on usein useita rooleja tai tarkkarajaisia scopeja. Tallentakaa ne taulukkona ja tarkistakaa jäsenyys. Näin ratkaisua voi myöhemmin laajentaa kohti käyttöoikeuksiin perustuvia (ABAC) järjestelmiä.
function hasRole(userRoles, required) {
return userRoles.some((r) => r === required);
}
console.log(hasRole(['editor', 'viewer'], 'editor'));Yleiset sudenkuopat
Välttäkää seuraavat RBAC-virheet:
- Luottaminen asiakkaan lähettämään rooliin.
- Roolien tarkistaminen vain käyttöliittymässä.
- JWT:n uudelleenmyöntämisen unohtaminen roolin muuttuessa.
- Roolimerkkijonojen kovakoodaus keskitetyn kartan sijaan.
Pikakysymys
Missä on auktoritatiivinen paikka valvoa, että vain ylläpitäjät voivat poistaa tietueen?
Kertaus
Toteutitte RBAC:n alusta loppuun:
- Tallensitte roolin JWT:hen ja sessioon NextAuth-callbackien avulla.
- Keskititte käyttöoikeudet
can()-helperiin. - Suojustitte Server Componentit, Route Handlerit ja Middlewaren.
- Käytitte usean tason suojausta ja vältitte asiakkaaseen luottamiseen liittyvät sudenkuopat.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Roolipohjainen käyttöoikeuksien hallinta (RBAC)” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Next.js 15 -täyden pinon verkkosovellukset-oppimispolun 3 oppituntia, myös oppitunnin “Roolipohjainen käyttöoikeuksien hallinta (RBAC)”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Next.js 15 -täyden pinon verkkosovellukset-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Roolipohjainen käyttöoikeuksien hallinta (RBAC)”?
Mallintakaa käyttäjäroolit ja käyttöoikeudet, tallentakaa ne sessioon ja valvokaa rooleja palvelinkomponenteissa, route handlereissa ja middlewaressä Next.js 15 -sovelluksessa. Harjoittelet Next.js 15 -täyden pinon verkkosovellukset-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Next.js 15 -täyden pinon verkkosovellukset-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Next.js 15 -täyden pinon verkkosovellukset-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Roolipohjainen käyttöoikeuksien hallinta (RBAC)”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Next.js 15 -täyden pinon verkkosovellukset-oppitunnilla?
Kyllä. Jokainen Next.js 15 -täyden pinon verkkosovellukset-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- NextAuth.js:n käyttöönotto
- Istuntojen hallinta ja JWT:t
- Middleware ja käyttöoikeuksien hallinta
- Roolipohjainen käyttöoikeuksien hallinta (RBAC)