Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Fabric Apps käyttää @role decoratoria liittääkseen valtuutussäännöt suoraan datamalleihisi. Käyttöoikeudet ovat tyyppiturvallisia, refaktorointiystävällisiä ja ne käännetään automaattisesti taustalla olevaan datan käyttökonfiguraatioon.
Alkuvalmistelut
- Ymmärrä ero todennuksen (kuka olet) ja valtuutuksen (mitä voit tehdä) välillä
- Tarkastelu Määritä todennus henkilöllisyyden varmistamiseksi
- Ymmärrä tietomallien yleiskatsaus yksiköiden perusteisiin
Sisäiset roolit
Fabric Apps tunnistaa sisäänrakennetun authenticated-roolin. Voit myös määritellä omia rooleja politiikkoihisi tarpeen mukaan.
| Role | Description | Käyttötapaus |
|---|---|---|
authenticated |
Vaatii kelvollisen käyttäjäsession Fabric-todennuksella | Käyttäjäkohtaiset tiedot, suojatut resurssit |
Sisustaja @role
Hae @role luokkatasolla hallitaksesi mitkä roolit voivat suorittaa mitäkin toimintoja jollain entiteetillä:
@role(roleName, actions, options?)
Parametrit
| Parametri | Tyyppi | Description |
|---|---|---|
roleName |
string |
Roolinimi, kuten 'authenticated' tai mukautettu sovellusrooli |
actions |
string \| string[] |
Yksitoiminen tai taulukko: 'create', , 'delete''read''update', , tai '*' kaikille |
options |
object |
Valinnainen objekti, jossa checkon , include, ja exclude ominaisuudet |
Perusesimerkki
Rajoita todennetut käyttäjät heidän omiin tietoihinsa:
import { entity, role, uuid, text } from '@microsoft/rayfin-core';
@entity()
@role('authenticated', ['create', 'read', 'update', 'delete'], {
policy: (claims, item) => claims.sub.eq(item.userId),
})
export class Todo {
@uuid() id!: string;
@text() title!: string;
@text({ optional: true }) description?: string;
@text() userId!: string;
}
Tässä esimerkissä:
- Todennetut käyttäjät pääsevät käsiksi vain Todo-esineisiin, jotka
userIdvastaavat heidän JWT-vaatimustaansub.
Tyypin turvalliset politiikkalausekkeet
Callback policy tarjoaa tyypitetyn pääsyn sekä väitteisiin että entiteettikenttiin. TypeScript päättelee entiteettityypin koristellusta luokasta, jolloin saat automaattisen suorituksen ja refaktoroinnin turvallisuuden:
policy: (claims, item) => claims.sub.eq(item.userId)
Tuetut väitteet
| Vaatimus | Description | Esimerkkiarvo |
|---|---|---|
claims.sub |
Aihetunniste (käyttäjätunnus) | 00000000-0000-0000-0000-000000000001 |
claims.email |
Käyttäjän sähköpostiosoite | user@contoso.com |
claims.role |
Käyttäjän rooli (jos identiteettipalveluntarjoaja on tarjonnut) | admin |
Lausekeoperaattorit
| Operaattori | Esimerkki | Description |
|---|---|---|
.eq() |
claims.sub.eq(item.userId) |
Tasa-arvotarkastus |
Loogiset operaattorit
Yhdistä lausekkeet ja .and().or():
// User must own the item AND item must be active
@role('authenticated', 'read', {
policy: (claims, item) =>
claims.sub.eq(item.userId).and(item.isActive.eq(true))
})
// User is admin OR user owns the item
@role('authenticated', ['update', 'delete'], {
policy: (claims, item) =>
claims.role.eq('admin').or(claims.sub.eq(item.ownerId))
})
Molemmat puolet on automaattisesti sulkuissa oikeaa ryhmittelyä varten.
Kenttätason käyttöoikeudet
Määritä kentät, joihin rooli pääsee käsiksi roolivalinnoissa include tai exclude rooliasetuksissa.
Sisällytä tietyt kentät
Salli kenttä title vain luontitoimintojen aikana:
@entity()
@role('authenticated', 'create', {
policy: (claims, item) => claims.sub.eq(item.createdBy),
include: ['title'],
})
export class Document {
@uuid() id!: string;
@text() title!: string;
@text({ optional: true }) content?: string;
@text() createdBy!: string;
}
Sulje pois tietyt kentät
Piilota herkät kentät lukutoiminnoilta:
@entity()
@role('authenticated', 'read', {
exclude: ['lastLogin', 'passwordHash'],
})
export class User {
@uuid() id!: string;
@text() email!: string;
@date({ optional: true }) lastLogin?: Date;
@text() passwordHash!: string;
}
Note
Kenttätaulukot tyypitetään entiteettien todellisten ominaisuuksien nimien mukaan. Kentän uudelleennimeäminen aiheuttaa käännösaikavirheen jokaisessa include tai exclude -listassa, joka viittaa siihen.
Toimintokohtaiset oikeudet
Sovella eri sääntöjä per toiminto useiden @role sisustajien avulla:
@entity()
@role('authenticated', 'create', {
policy: (claims, item) => claims.sub.eq(item.createdBy),
include: ['title', 'content'],
})
@role('authenticated', 'read', {
policy: (claims, item) => claims.sub.eq(item.createdBy),
})
@role('authenticated', 'update', {
policy: (claims, item) => claims.sub.eq(item.createdBy),
exclude: ['adminNotes'],
})
@role('authenticated', 'delete', {
policy: (claims, item) => claims.sub.eq(item.createdBy),
})
export class SecureDocument {
@uuid() id!: string;
@text() title!: string;
@text({ optional: true }) content?: string;
@text({ optional: true }) adminNotes?: string;
@text() createdBy!: string;
}
Tämä kokoonpano:
-
Luo: Vain luoja voi luoda, ja vain
titlejacontentkentät ovat sallittuja. - Lue: Vain tekijä voi lukea omia dokumenttejaan.
-
Päivitys: Vain tekijä voi päivittää, mutta he eivät voi muokata
adminNotes. - Poista: Vain tekijä voi poistaa.
Miten käyttöoikeudet toimivat
-
Metatietojen keruu: Sisustaja
@rolekerää käyttöoikeusmetatietoja, kun luokka määritetään. -
Skeeman generointi: Kun suoritat
db apply, CLI lukee metatietoja ja generoi käyttöoikeusasetukset. -
Politiikan kääntäminen: TypeScript-politiikan callbackit käännetään datan käyttöpolitiikkalausekkeiksi (esim.
@claims.sub eq @item.userId). - Ajonaikainen valvonta: Datan käyttökerros valvoo oikeuksia jokaisessa API-pyynnössä.
-
Ristiriitojen tunnistus: Useita
@rolesisustajia samassa luokassa on koottu per rooli, ja ristiriitaisista ilmoituksista varoitetaan.
Yleiset mallit
Vain omistajalle tarkoitettu pääsy
@entity()
@role('authenticated', '*', {
policy: (claims, item) => claims.sub.eq(item.ownerId)
})
export class PrivateNote {
@uuid() id!: string;
@text() ownerId!: string;
@text() content!: string;
}
Täysi pääsy todennetuille käyttäjille
@entity()
@role('authenticated', '*')
export class BlogPost {
@uuid() id!: string;
@text() title!: string;
@text() content!: string;
}
Järjestelmänvalvojan ohitus
@entity()
@role('authenticated', ['create', 'read', 'update'], {
policy: (claims, item) =>
claims.role.eq('admin').or(claims.sub.eq(item.ownerId))
})
@role('authenticated', 'delete', {
policy: (claims, _item) => claims.role.eq('admin')
})
export class ManagedResource {
@uuid() id!: string;
@text() ownerId!: string;
@text() name!: string;
}
Ylläpitäjät voivat muokata mitä tahansa resurssia, mutta vain ylläpitäjät voivat poistaa sen.
Seuraavat vaiheet
- Määritä tunnistautuminen identiteettipalveluntarjoajien määrittämiseksi
- Hae tietoja GraphQL :llä käyttöoikeussuojattujen kyselyiden testaamiseksi
- CLI-komentoviite skeeman generointikomennoille