RBAC käytännössä: Turvallisen valtuutuksen toteuttaminen sovelluksessasi
Täydellinen opas roolipohjaiseen pääsynhallintaan (RBAC): Hallitse käyttöoikeuksien suunnittelu, roolien hallinta ja turvallinen valtuutus käytännön CMS-toteutuksen avulla.
Onko sinulla vaikeuksia toteuttaa turvallista ja skaalautuvaa valtuutusjärjestelmää sovellukseesi? Roolipohjainen pääsynhallinta (RBAC) on alan standardi käyttäjäoikeuksien hallintaan, mutta sen oikein toteuttaminen voi olla haastavaa. Tämä opastus näyttää, kuinka rakennat vankan RBAC-järjestelmän käyttämällä tosielämän sisällönhallintajärjestelmän (CMS) esimerkkiä.
Seuraamalla tätä opasta opit:
- ✨ Kuinka suunnitella ja toteuttaa hienojakoiset käyttöoikeudet, jotka antavat sinulle tarkan hallinnan
- 🔒 Parhaat käytännöt käyttöoikeuksien organisointiin merkityksellisiksi rooleiksi
- 👤 Tekniikat resurssin omistuksen tehokkaaseen hallintaan
- 🚀 Tapoja tehdä valtuutusjärjestelmästäsi skaalautuva ja ylläpidettävä
- 💡 Käytännön toteutus tosielämän CMS-esimerkillä
Tämän opastuksen kokonaislähdekoodi on saatavilla GitHubissa.
RBAC:n perusteiden ymmärtäminen
Roolipohjainen pääsynhallinta on enemmän kuin vain käyttäjäoikeuksien määrittämistä. Se on jäsennellyn valtuutuslähestymistavan luomista, joka tasapainottaa turvallisuuden ja ylläpidettävyyden.
Voit oppia lisää Mikä on RBAC Auth Wikistä.
Tässä ovat tärkeimmät periaatteet, joita noudatamme toteutuksessamme:
Hienojakoinen käyttöoikeuksien suunnittelu
Hienojakoiset käyttöoikeudet antavat sinulle tarkan hallinnan siitä, mitä käyttäjät voivat tehdä järjestelmässäsi. Sen sijaan, että sallisimme laajasti "ylläpitäjä" tai "käyttäjä" tason pääsyn, määrittelemme tarkat toiminnot, joita käyttäjät voivat suorittaa resursseilla. Esimerkiksi:
read:articles
- Katso mikä tahansa artikkeli järjestelmässäcreate:articles
- Luo uusia artikkeleitaupdate:articles
- Muokkaa olemassa olevia artikkeleitapublish:articles
- Muuta artikkeleiden julkaisutilaa
Resurssin omistajuus ja käyttöoikeuden hallinta
Roolipohjaisen pääsynhallinnan (RBAC) määriteltyjen roolien suorittamien toimintojen lisäksi omistajuus lisää henkilökohtaisen ulottuvuuden käyttöoikeuden hallintaan:
- Tekijöillä on automaattisesti pääsy luomiinsa artikkeleihin
- Tämä luonnollisen omistajuuden malli tarkoittaa, että tekijät voivat aina katsella ja muokata omaa sisältöään
- Järjestelmä tarkistaa sekä roolioikeudet TAI omistajuuden käsitellessään artikkelitoimintoja
- Esimerkiksi, vaikka tekijällä ei olisi
update:articles
oikeutta, hän voi silti muokata omia artikkeleitaan - Tämä suunnittelu vähentää ylimääräisten roolioikeuksien tarvetta samalla säilyttäen turvallisuuden
Tämä kaksitasoinen lähestymistapa (roolit + omistajuus) luo intuitiivisemman ja turvallisemman järjestelmän. Julkaisijat ja ylläpitäjät voivat edelleen hallita kaikkea sisältöä roolioikeuksiensa kautta, sillä tekijät säilyttävät hallinnan omista töistään.
Turvallisten API:en suunnittelu
Aloitetaan CMS:n ydinominaisuuksien suunnittelulla sen API-pisteiden kautta:
Toteuta käyttöoikeuden hallinta API:llesi
Jokaisen päätepisteen kohdalla on harkittava kahta käyttöoikeuden hallinnan osa-aluetta:
- Resurssin omistajuus - Omistaako käyttäjä tämän resurssin?
- Roolipohjaiset käyttöoikeudet - Salliko käyttäjän rooli tämän toiminnon?
Näin käsittelemme käyttöoikeutta jokaiselle päätepisteelle:
Päätepiste | Käyttöoikeuden hallinnan logiikka |
---|---|
GET /api/articles | - Kuka tahansa list:articles oikeudella, TAI tekijät voivat nähdä omat artikkelinsa |
GET /api/articles/:id | - Kuka tahansa read:articles oikeudella, TAI artikkelin tekijä |
POST /api/articles | - Kuka tahansa create:articles oikeudella |
PATCH /api/articles/:id | - Kuka tahansa update:articles oikeudella, TAI artikkelin tekijä |
DELETE /api/articles/:id | - Kuka tahansa delete:articles oikeudella, TAI artikkelin tekijä |
PATCH /api/articles/:id/published | - Vain käyttäjillä, joilla on publish:articles oikeus |
Luo käyttöoikeusjärjestelmä, joka skaalaa
API-pääsytarpeidemme perusteella voimme määritellä nämä käyttöoikeudet:
Käyttöoikeus | Kuvaus |
---|---|
list:articles | Näytä kaikkien järjestelmän artikkeleiden lista |
read:articles | Lue minkä tahansa artikkelin koko sisältö |
create:articles | Luo uusia artikkeleita |
update:articles | Muokkaa mitä tahansa artikkelia |
delete:articles | Poista mikä tahansa artikkeli |
publish:articles | Muuta julkaisutilaa |
Huomaa, että nämä käyttöoikeudet ovat tarpeen vain, kun pääsy resursseihin, joita et omista. Artikkelien omistajat voivat automaattisesti:
- Katsella omia artikkeleitaan (ei tarvitse
read:articles
oikeutta) - Muokata omia artikkeleitaan (ei tarvitse
update:articles
oikeutta) - Poistaa omia artikkeleitaan (ei tarvitse
delete:articles
oikeutta)
Tehokkaiden roolien rakentaminen
Nyt kun olemme määritelleet API:mme ja käyttöoikeudet, voimme luoda roolit, jotka ryhmittelevät nämä oikeudet loogisesti:
Käyttöoikeus/Rooli | 👑 Ylläpitäjä | 📝 Julkaisija | ✍️ Tekijä |
---|---|---|---|
Kuvaus | Järjestelmän täysi pääsy kokonaisvaltaiseen sisällön hallintaan | Voi katsella kaikkia artikkeleita ja hallita julkaisujen tilaa | Voi luoda uusia artikkeleita järjestelmässä |
list:articles | ✅ | ✅ | ❌ |
read:articles | ✅ | ✅ | ❌ |
create:articles | ✅ | ❌ | ✅ |
update:articles | ✅ | ❌ | ❌ |
delete:articles | ✅ | ❌ | ❌ |
publish:articles | ✅ | ✅ | ❌ |
Huom: Tekijöillä on automaattisesti luku/päivitys/poisto-oikeudet omiin artikkeleihinsa riippumatta roolioikeuksista.
Jokainen rooli on suunniteltu tietyt vastuut mielessä pitäen:
- Ylläpitäjä: Omistaa täydellisen hallinnan CMS:ssä, mukaan lukien kaikki artikkelitoiminnot
- Julkaisija: Keskittyy sisällön tarkasteluun ja julkaisun hallintaan
- Tekijä: Erikoistuu sisällön luomiseen
Tämä roolirakenne luo selkeän vastuujaon:
- Tekijät keskittyvät sisällön luomiseen
- Julkaisijat hallitsevat sisällön laatua ja näkyvyyttä
- Ylläpitäjät ylläpitävät kokonaisvaltaista järjestelmän hallintaa
RBAC:n konfigurointi Logtossa
Ennen kuin aloitat, sinun on luotava tili Logto Cloudiin, tai voit käyttää itseisännöityä Logto-instanssia käyttämällä Logto OSS versiota.
Tässä opastuksessa käytämme Logto Cloudia yksinkertaisuuden vuoksi.
Sovelluksen määritys
- Siirry "Sovellukset" osioon Logto Consolessa luodaksesi uuden React-sovelluksen
- Sovelluksen nimi: Sisällönhallintajärjestelmä
- Sovellustyyppi: Perinteinen verkkosovellus
- Uudelleenohjaus URIt: http://localhost:5173/callback
API-resurssien ja -oikeuksien konfigurointi
- Siirry "API Resurssit" osioon Logto Consolessa luodaksesi uuden API-resurssin
- API-nimi: CMS API
- API-tunniste: https://api.cms.com
- Lisää käyttöoikeudet API-resurssiin
list:articles
read:articles
create:articles
update:articles
publish:articles
delete:articles
Roolien luominen
Siirry Roolit osioon Logto Consolessa luodaksesi seuraavat roolit CMS:lle
- Ylläpitäjä
- kaikilla oikeuksilla
- Julkaisija
- oikeuksilla
read:articles
,list:articles
,publish:articles
- oikeuksilla
- Tekijä
- oikeuksilla
create:articles
- oikeuksilla
Roolien määritys käyttäjille
Siirry "Käyttäjähallinta" osioon Logto Consolessa luodaksesi käyttäjiä.
Käyttäjätietojen "Roolit" välilehdessä voit määrätä käyttäjälle rooleja.
Esimerkissämme loimme 3 käyttäjää seuraavilla rooleilla:
- Alex: Ylläpitäjä
- Bob: Julkaisija
- Charlie: Tekijä
Logto RBAC:n integrointi frontendissäsi
Nyt kun olemme määrittäneet RBAC:n Logtossa, voimme alkaa integroida sen frontendissämme.
Ensin seuraa Logto-pikaoppaat integroidaksesi Logton sovellukseesi.
Esimerkissämme käytämme Reactia demonstrointiin.
Kun olet määrittänyt Logton sovelluksessasi, sinun on lisättävä RBAC-konfiguraatiot Logtoa varten.
Muista kirjautua ulos ja uudelleen sisään, jotta tämä muutos astuu voimaan, jos olet jo kirjautuneena sisään.
Kun käyttäjä kirjautuu sisään Logtoon ja pyytää käyttöoikeustokenia yllä spesifioitujen API-resurssien osalta, Logto lisää käyttöoikeuksia (käyttöoikeudet), jotka liittyvät käyttäjän rooliin, käyttöoikeustokeniin.
Voit käyttää getAccessTokenClaims
useLogto
hookista saadaksesi käyttöoikeudet käyttöoikeustokenista.
Ja voit käyttää userScopes
-kohtaa tarkastellaksesi, onko käyttäjällä oikeus resurssin käyttöön.
Logto RBAC:n integrointi backendissäsi
Nyt on aika integroida Logto RBAC backendissäsi.
Backendin valtuutusväliohjelmisto
Ensin meidän on lisättävä väliohjelmisto backendissä tarkistaaksemme käyttäjän oikeudet, varmistaaksemme, että käyttäjä on kirjautunut sisään, ja määrittääksemme, onko heillä tarvittavat oikeudet tiettyjen API:en käyttöön.
Kuten näet, tässä väliohjelmistossa tarkistamme, sisältääkö frontend-pyyntö voimassa olevan käyttöoikeustokenin, ja tarkistamme, vastaako käyttöoikeustokenin yleisö API-resurssia, jonka loimme Logto Consolessa.
Syynä API-resurssin tarkistamiselle on, että API-resurssimme edustaa tosiasiassa CMS-backendimme resursseja, ja kaikki CMS:n käyttöoikeutemme liittyvät tähän API-resurssiin.
Koska tämä API-resurssi edustaa Logton CMS-resursseja, frontend-koodissamme sisällytämme vastaavan käyttöoikeustokenin tehdessämme API-pyyntöjä backendiin:
Nyt voimme käyttää requireAuth
väliohjelmistoa suojataksemme API-päätepisteitämme.
API-päätepisteiden suojaaminen
API:lle, joiden tulisi olla saavutettavissa vain käyttäjillä, joilla on tietyt oikeudet, voimme lisätä rajoituksia suoraan väliohjelmistoon. Esimerkiksi artikkelien luonti-API:n tulisi olla saavutettavissa vain create:articles
oikeutta omaaville käyttäjille:
API:lle, joilla on tarkistettava sekä oikeudet että resurssin omistajuus, voimme käyttää hasScopes
-toimintoa. Esimerkiksi artikkelien listauksen API:ssa käyttäjät, joilla on list:articles
oikeus, voivat käyttää kaikkia artikkeleita, kun taas tekijät voivat käyttää omia luomiaan artikkeleitaan:
Tässä vaiheessa olemme suorittaneet RBAC-toteutuksen. Voit tarkistaa täydellisen lähdekoodin nähdäksesi koko toteutuksen.
Testaa CMS RBAC -toteutus
Nyt testataan CMS RBAC -toteutustamme juuri luomiimme kolmeen käyttäjään.
Ensinnäkin kirjaudutaan Alexin ja Charlien käyttäjätunnuksilla ja luodaan joitakin artikkeleita.
Koska Alexilla on Ylläpitäjän rooli, hän voi luoda, poistaa, päivittää, julkaista ja nähdä kaikki artikkelit.
Charlie, jolla on Tekijän rooli, voi luoda vain omia artikkeleitaan ja vain nähdä, päivittää ja poistaa omia artikkeleitaan.
Bob, jolla on Julkaisijan rooli, voi nähdä ja julkaista kaikki artikkelit, mutta ei voi luoda, päivittää tai poistaa niitä.
Yhteenveto
Onnittelut! Olet oppinut, kuinka toteuttaa vankka RBAC-järjestelmä sovelluksessasi.
Monimutkaisemmissa tilanteissa, kuten monikäyttäjäisten sovellusten rakentamisessa, Logto tarjoaa kattavaa organisaatiotukea. Tutustu oppaaseemme Monikäyttäjäisen SaaS-sovelluksen rakentaminen: Täydellinen opas suunnittelusta toteutukseen oppiaksesi lisää organisaatiolaajuisen pääsyn hallinnan toteutuksesta.
Hauskaa koodaamista! 🚀