Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fabric Alkalmazások a @role dekoratőr használatával csatolják az engedélyezési szabályokat közvetlenül az adatmodellekhez. Az engedélyek típusbiztosak, újrabontásbarátak, és automatikusan lefordíthatók az alapul szolgáló adathozzáférési konfigurációba.
Mielőtt hozzákezdene
- A hitelesítés (ki ön) és az engedélyezés (mit tehet) közötti különbség megértése
- Az identitás-ellenőrzés beállításához tekintse át a Hitelesítés konfigurálása című részt
- Az adatmodellek áttekintése az entitás alapjaihoz
Beépített szerepkörök
A Fabric Apps felismeri a beépített authenticated funkciókat és anonymous a szerepeket. Szükség esetén egyéni szerepköröket is definiálhat a szabályzatokban.
| Role | Leírás | Felhasználási eset |
|---|---|---|
authenticated |
Érvényes felhasználói munkamenetet igényel Fabric hitelesítéssel | Felhasználóspecifikus adatok, védett erőforrások |
anonymous |
Lehetővé teszi a hozzáférést érvényes felhasználói ülés nélkül. További információért lásd: Anonim adathozzáférés a Fabric alkalmazásokban. | Nyilvános adatok és hitelesítetlen élmények |
A @role dekoratőr
Az osztály szintjén alkalmazva @role szabályozhatja, hogy mely szerepkörök hajthatják végre az entitásokon végrehajtott műveleteket:
@role(roleName, actions, options?)
Parameters
| Paraméter | Típus | Leírás |
|---|---|---|
roleName |
string |
A szerepkör neve, például 'authenticated' vagy egy egyéni alkalmazásszerepkör |
actions |
string \| string[] |
Egyetlen művelet vagy tömb: 'create', 'read', 'update', 'delete'vagy '*' az összes |
options |
object |
Választható objektum check, és includeexclude tulajdonságokkal |
Alapvető példa
A hitelesített felhasználók korlátozása a saját adataikra:
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;
}
Ebben a példában:
- A hitelesített felhasználók csak olyan Todo-elemeket érhetnek el, amelyek
userIdmegegyeznek a JWT-jogcímükkelsub.
Típusbiztos szabályzatkifejezések
A policy visszahívás gépelt hozzáférést biztosít a jogcímekhez és az entitásmezőkhöz is. A TypeScript a dekorált osztály alapján kikövetkezteti az entitás típusát, így automatikus kódkiegészítést és biztonságos refaktorálást tesz lehetővé:
policy: (claims, item) => claims.sub.eq(item.userId)
Támogatott állítások
| Igény | Leírás | Példaérték |
|---|---|---|
claims.sub |
Tárgyazonosító (felhasználói azonosító) | 00000000-0000-0000-0000-000000000001 |
claims.email |
Felhasználói e-mail-cím | user@contoso.com |
claims.role |
Felhasználói szerepkör (ha az identitásszolgáltató biztosítja) | admin |
Kifejezés operátorai
| Operator | Example | Leírás |
|---|---|---|
.eq() |
claims.sub.eq(item.userId) |
Egyenlőség ellenőrzése |
Logikai operátorok
Kifejezések kombinálása a .and() és .or() elemekkel:
// 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))
})
A megfelelő csoportosítás érdekében mindkét oldal zárójelben van.
Mezőszintű engedélyek
Adja meg, hogy egy szerepkör mely mezőkhöz férhet hozzá a szerepkör beállításainál a(z) include vagy exclude használatával.
Adott mezők belefoglalása
Csak létrehozási műveletek során engedélyezze a(z) title mezőt:
@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;
}
Adott mezők kizárása
Bizalmas mezők elrejtése olvasási műveletek elől:
@entity()
@role('authenticated', 'read', {
exclude: ['lastLogin', 'passwordHash'],
})
export class User {
@uuid() id!: string;
@text() email!: string;
@date({ optional: true }) lastLogin?: Date;
@text() passwordHash!: string;
}
Megjegyzés:
A mezőtömbök az entitás tényleges tulajdonságneveibe vannak begépelve. Egy mező átnevezése fordítási idejű hibát eredményez minden olyan include vagy exclude listában, amely hivatkozik rá.
Műveletspecifikus engedélyek
Műveletenként különböző szabályokat alkalmazhat több @role dekorátor használatával:
@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;
}
Ez a konfiguráció:
-
Létrehozás: Csak a létrehozó hozhat létre, és csak
titleéscontentmezők engedélyezettek. - Olvasás: Csak a létrehozó tudja elolvasni a saját dokumentumait.
-
Frissítés: Csak a létrehozó frissíthet, de nem módosíthatja
adminNotes. - Törlés: Csak a létrehozó törölhet.
Az engedélyek működése
-
Metaadatok gyűjtése: A
@roledekorátor az osztály definiálásakor gyűjti az engedély metaadatait. -
Séma létrehozása: Futtatáskor
db applya parancssori felület felolvassa a metaadatokat, és létrehozza az engedélykonfigurációt. -
Szabályzat összeállítása: A TypeScript-szabályzatvisszahívások adathozzáférési szabályzatkifejezésekké vannak lefordítva (például
@claims.sub eq @item.userId). - Futtatókörnyezet kényszerítése: Az adatelérési réteg minden API-kéréshez kikényszeríti az engedélyeket.
-
Ütközések észlelése: Az ugyanazon az osztályon szereplő több
@roledekorátort a rendszer szerepkörönként összesíti, és figyelmeztetést ad az ütköző deklarációk esetén.
Gyakori minták
Csak tulajdonosi hozzáférés
@entity()
@role('authenticated', '*', {
policy: (claims, item) => claims.sub.eq(item.ownerId)
})
export class PrivateNote {
@uuid() id!: string;
@text() ownerId!: string;
@text() content!: string;
}
Teljes hozzáférés hitelesített felhasználók számára
@entity()
@role('authenticated', '*')
export class BlogPost {
@uuid() id!: string;
@text() title!: string;
@text() content!: string;
}
Rendszergazdai felülbírálat
@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;
}
A rendszergazdák bármilyen erőforrást módosíthatnak, de csak a rendszergazdák törölhetik őket.
Következő lépések
- Hitelesítés konfigurálása identitásszolgáltatók beállításához
- Adatok lekérdezése a GraphQL használatával az engedélyekkel védett lekérdezések teszteléséhez
- Parancssori felületi parancsok hivatkozása sémagenerálási parancsokhoz