Suomi
  • rbac
  • roolisuunnittelu
  • rbac-toteutus

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.

Yijun
Yijun
Developer

Lopeta viikkojen tuhlaaminen käyttäjien tunnistautumiseen
Julkaise turvallisia sovelluksia nopeammin Logtolla. Integroi käyttäjien tunnistautuminen minuuteissa ja keskity ydintuotteeseesi.
Aloita
Product screenshot

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 artikkeleita
  • update:articles - Muokkaa olemassa olevia artikkeleita
  • publish: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:

  1. Resurssin omistajuus - Omistaako käyttäjä tämän resurssin?
  2. 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äätepisteKä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öoikeusKuvaus
list:articlesNäytä kaikkien järjestelmän artikkeleiden lista
read:articlesLue minkä tahansa artikkelin koko sisältö
create:articlesLuo uusia artikkeleita
update:articlesMuokkaa mitä tahansa artikkelia
delete:articlesPoista mikä tahansa artikkeli
publish:articlesMuuta 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ä
KuvausJärjestelmän täysi pääsy kokonaisvaltaiseen sisällön hallintaanVoi katsella kaikkia artikkeleita ja hallita julkaisujen tilaaVoi 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

  1. Siirry "Sovellukset" osioon Logto Consolessa luodaksesi uuden React-sovelluksen

CMS React sovellus

API-resurssien ja -oikeuksien konfigurointi

  1. 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

CMS API resurssitiedot

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
  • Tekijä
    • oikeuksilla create:articles

Ylläpitäjä rooli

Julkaisija rooli

Tekijä rooli

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ä

Käyttäjähallinta

Käyttäjän tiedot - Alex

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.

CMS dashboard - Alex

Charlie, jolla on Tekijän rooli, voi luoda vain omia artikkeleitaan ja vain nähdä, päivittää ja poistaa omia artikkeleitaan.

CMS dashboard - Charlie - Artikkelilista

Bob, jolla on Julkaisijan rooli, voi nähdä ja julkaista kaikki artikkelit, mutta ei voi luoda, päivittää tai poistaa niitä.

CMS dashboard - Bob

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