Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Fabric Apps, yetkilendirme kurallarını doğrudan veri modellerinize eklemek için @role dekoratörunu kullanır. İzinler tür güvenliğine sahiptir, yeniden düzenlemeye elverişlidir ve otomatik olarak altyapıdaki veri erişim yapılandırmasına derlenir.
Başlamadan önce
- Kimlik doğrulaması (kim olduğunuz) ile yetkilendirme (yapabilecekleriniz) arasındaki farkı anlama
- Kimlik doğrulamayı ayarlamak için Kimlik doğrulamayı yapılandırma bölümünü gözden geçirin
- Varlık temelleri için Veri modellerine genel bakış
Yerleşik roller
Fabric Uygulamaları yerleşik authenticated rolünü tanır. Gerektiğinde ilkelerinizde özel roller de tanımlayabilirsiniz.
| Rolü | Açıklama | Kullanım örneği |
|---|---|---|
authenticated |
Fabric kimlik doğrulamasıyla geçerli bir kullanıcı oturumu gerektirir | Kullanıcıya özgü veriler, korumalı kaynaklar |
Dekoratör @role
Bir varlıkta hangi rollerin hangi eylemleri gerçekleştirebileceğini denetlemek için sınıf düzeyinde uygulayın @role :
@role(roleName, actions, options?)
Parameters
| Parametre | Türü | Açıklama |
|---|---|---|
roleName |
string |
Veya özel uygulama rolü gibi 'authenticated' rol adı |
actions |
string \| string[] |
Tek eylem veya dizi: 'create', 'read', 'update', 'delete', veya '*' tümü için |
options |
object |
, checkve include özelliklerine sahip excludeisteğe bağlı nesne |
Temel örnek
Kimliği doğrulanmış kullanıcıları kendi verileriyle kısıtlayın:
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;
}
Bu örnekte:
- Kimliği doğrulanmış kullanıcılar yalnızca
userIddeğeri kendi JWTsubclaim’leriyle eşleşen Todo öğelerine erişebilir.
Tür açısından güvenli ilke ifadeleri
Geri policy arama, hem taleplere hem de varlık alanlarına türlenmiş erişim sağlar. TypeScript, dekore edilmiş sınıftan varlık türünü çıkararak size otomatik tamamlama ve yeniden düzenleme güvenliği sağlar:
policy: (claims, item) => claims.sub.eq(item.userId)
Desteklenen talepler
| İddia | Açıklama | Örnek değer |
|---|---|---|
claims.sub |
Konu tanımlayıcısı (kullanıcı kimliği) | 00000000-0000-0000-0000-000000000001 |
claims.email |
Kullanıcı e-posta adresi | user@contoso.com |
claims.role |
Kullanıcı rolü (kimlik sağlayıcısı tarafından sağlanıyorsa) | admin |
İfade işleçleri
| Operator | Example | Açıklama |
|---|---|---|
.eq() |
claims.sub.eq(item.userId) |
Eşitlik denetimi |
Mantıksal işleçler
İfadeleri .and() ve .or() ile birleştirin:
// 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))
})
Doğru gruplandırma için iki taraf da otomatik olarak parantez içine alınır.
Alan düzeyinde izinler
Rol seçeneklerinde, include veya exclude kullanarak rolün erişebileceği alanları belirtin.
Belirli alanları ekle
Yalnızca oluşturma işlemleri sırasında title alanına izin verin:
@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;
}
Belirli alanları hariç tutma
Hassas alanları okuma işlemlerinden gizle:
@entity()
@role('authenticated', 'read', {
exclude: ['lastLogin', 'passwordHash'],
})
export class User {
@uuid() id!: string;
@text() email!: string;
@date({ optional: true }) lastLogin?: Date;
@text() passwordHash!: string;
}
Uyarı
Alan dizileri varlığın gerçek özellik adlarına yazılır. Bir alanı yeniden adlandırmak, ona başvuran her include veya exclude listede derleme zamanı hatası oluşturur.
Eyleme özgü izinler
Birden çok @role dekoratör kullanarak eylem başına farklı kurallar uygulayın:
@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;
}
Bu yapılandırma:
-
Oluşturma: Yalnızca oluşturucu oluşturabilir ve yalnızca
titlevecontentalanlara izin verilir. - Okuma: Yalnızca oluşturucu kendi belgelerini okuyabilir.
-
Güncelleştirme: Yalnızca oluşturucu güncelleştirebilir, ancak değiştiremez
adminNotes. - Sil: Yalnızca oluşturucu silebilir.
İzinler nasıl çalışır?
-
Meta veri koleksiyonu: Sınıf
@roletanımlandığında dekoratör izin meta verilerini toplar. -
Şema oluşturma: komutunu çalıştırdığınızda
db apply, CLI meta verileri okur ve izin yapılandırması oluşturur. -
İlke derleme: TypeScript ilkesi geri çağırmaları veri erişim ilkesi ifadelerinde derlenir (örneğin,
@claims.sub eq @item.userId). - Çalışma zamanı zorlaması: Veri erişim katmanı her API isteğinde izinleri zorlar.
-
Çakışma algılama: Aynı sınıftaki birden çok
@roledekoratör, çakışan bildirimlere yönelik uyarılarla birlikte rol başına toplanır.
Ortak desenler
Yalnızca sahibine erişim
@entity()
@role('authenticated', '*', {
policy: (claims, item) => claims.sub.eq(item.ownerId)
})
export class PrivateNote {
@uuid() id!: string;
@text() ownerId!: string;
@text() content!: string;
}
Kimliği doğrulanmış kullanıcılar için tam erişim
@entity()
@role('authenticated', '*')
export class BlogPost {
@uuid() id!: string;
@text() title!: string;
@text() content!: string;
}
Yönetici tarafından geçersiz kılma
@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;
}
Yöneticiler herhangi bir kaynağı değiştirebilir, ancak yalnızca yöneticiler silebilir.
Sonraki Adımlar
- Kimlik sağlayıcılarını ayarlamak için kimlik doğrulamasını yapılandırma
- İzin korumalı sorguları test etmek için GraphQL ile verileri sorgulama
- Şema oluşturma komutları için CLI komut başvurusu