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.
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:
Tämän opastuksen kokonaislähdekoodi on saatavilla GitHubissa.
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:
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 julkaisutilaaRoolipohjaisen pääsynhallinnan (RBAC) määriteltyjen roolien suorittamien toimintojen lisäksi omistajuus lisää henkilökohtaisen ulottuvuuden käyttöoikeuden hallintaan:
update:articles oikeutta, hän voi silti muokata omia artikkeleitaanTä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.
Aloitetaan CMS:n ydinominaisuuksien suunnittelulla sen API-pisteiden kautta:
Jokaisen päätepisteen kohdalla on harkittava kahta käyttöoikeuden hallinnan osa-aluetta:
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 |
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:
read:articles oikeutta)update:articles oikeutta)delete:articles oikeutta)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:
Tämä roolirakenne luo selkeän vastuujaon:
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.

list:articlesread:articlescreate:articlesupdate:articlespublish:articlesdelete:articles
Siirry Roolit osioon Logto Consolessa luodaksesi seuraavat roolit CMS:lle
read:articles, list:articles, publish:articlescreate:articles


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:


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.
Nyt on aika integroida Logto RBAC backendissäsi.
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: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.
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ä.

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! 🚀