Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
Fungsionalitas Pembuat API Data 2.0 yang dijelaskan di bagian ini saat ini dalam pratinjau dan mungkin berubah sebelum ketersediaan umum. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Pewarisan peran memungkinkan Anda menetapkan izin pada peran yang lebih luas, dan peran yang lebih spesifik dapat secara otomatis mengambil alih akses tersebut. Tanpa pewarisan peran, Anda harus menyalin ulang blok izin akses yang sama untuk setiap peran pada setiap entitas. Dengan pewarisan peran, Anda hanya perlu menentukan akses pada anonymous satu kali, dan setiap peran yang lebih luas mendapatkan akses yang sama.
Rantai pewarisan
Rantai warisan mengalir dari hak istimewa paling sedikit ke yang paling istimewa:
named-role → authenticated → anonymous
| Peranan | Mewarisi dari | Catatan |
|---|---|---|
Peran bernama (misalnya, editor) |
authenticated |
Atau dari anonymous jika authenticated tidak dikonfigurasi |
authenticated |
anonymous |
Berlaku ketika tidak ada blok eksplisit authenticated |
anonymous |
(tidak ada) | Dasar rantai; tidak ada alternatif cadangan |
Yang dimaksud dengan rantai adalah:
- Jika suatuperan bernama tidak memiliki blok izin, DAB mencari blok
authenticated. Jika tidak ada, ia akan kembali keanonymous. - Jika
authenticatedtidak memiliki blok izin, DAB menggunakananonymousblok. - Jika
anonymoustidak memiliki blok izin, permintaan ditolak dengan403 Forbidden.
Bagaimana pewarisan diselesaikan
Ketika DAB mengevaluasi permintaan, ia menentukan peran efektif dan kemudian mengikuti hierarki pewarisan untuk menemukan blok izin.
- DAB mengidentifikasi peran efektif dari permintaan (melalui
X-MS-API-ROLEheader, klaim token, atau default). - DAB mencari sebuah blok izin eksplisit di
entities.<name>.permissionsyang cocok dengan peran yang efektif. - Jika tidak ada blok yang cocok, DAB menelusuri rantai:
authenticated→anonymous. - Blok pencocokan pertama yang ditemukan menyediakan izin untuk permintaan tersebut.
- Jika tidak ada blok yang cocok dengan peran apa pun dalam rantai, DAB mengembalikan
403 Forbidden.
Nota
DAB mengevaluasi izin dalam konteks tepat satu peran efektif per permintaan. Pewarisan peran tidak menggabungkan izin dari beberapa peran.
Examples
Konfigurasi minimum: izin tunggal untuk semua peran
read Tentukan izin pada anonymous. Setiap peran—authenticated dan peran bernama apa pun—mewarisi akses tersebut.
{
"entities": {
"Book": {
"source": "dbo.books",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] }
]
}
}
}
Izin efektif untuk konfigurasi ini:
Entity: Book
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles | Inherit from: anonymous
Konfigurasi berlapis: akses berbeda per peran
Saat Anda memerlukan tingkat akses yang berbeda per peran, tentukan masing-masing secara eksplisit. Pewarisan hanya mengisi peran yang tidak Anda konfigurasi.
{
"entities": {
"Order": {
"source": "dbo.orders",
"permissions": [
{ "role": "anonymous", "actions": [ "read" ] },
{ "role": "authenticated", "actions": [ "read", "create" ] },
{ "role": "admin", "actions": [ "*" ] }
]
}
}
}
Izin efektif untuk konfigurasi ini:
Entity: Order
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read, Create
Role: admin | Actions: Create, Read, Update, Delete
Unconfigured roles | Inherit from: authenticated
Setiap peran bernama selain admin—misalnya, viewer atau support—mewarisi dari authenticated dan mendapatkan akses read serta create.
Tidak ada warisan: sepenuhnya diblokir
Jika anonymous tidak memiliki blok izin dan tidak ada peran lain dalam rantai yang memilikinya, setiap permintaan ke entitas tersebut ditolak.
{
"entities": {
"AuditLog": {
"source": "dbo.audit_log",
"permissions": [
{ "role": "admin", "actions": [ "read" ] }
]
}
}
}
Dalam konfigurasi ini, hanya admin dapat mengakses AuditLog.
authenticated dan anonymous tidak memiliki blok untuk mewarisi, sehingga DAB menolak permintaan dari peran tersebut dengan 403 Forbidden.
Penting
DAB memancarkan peringatan saat startup ketika authenticated atau peran bernama dikonfigurasi pada entitas tetapi penyedia Unauthenticated aktif. Ketika Unauthenticated aktif, peran tersebut tidak pernah diaktifkan. Untuk informasi selengkapnya, lihat Mengonfigurasi Penyedia Tidak Diotentikasi.
Melihat hak akses yang efektif
Gunakan dab configure --show-effective-permissions untuk menampilkan izin yang diselesaikan untuk setiap entitas, termasuk peran mana yang diwarisi dari mana. Perintah ini adalah cara tercepat untuk memverifikasi warisan berfungsi seperti yang diharapkan tanpa menjalankan mesin.
dab configure --show-effective-permissions
Anda juga dapat menargetkan file konfigurasi tertentu:
dab configure --show-effective-permissions --config my-config.json
Contoh output:
Entity: Book
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles inherit from: anonymous
Entity: Order
Role: admin | Actions: Create, Read, Update, Delete
Role: anonymous | Actions: Read
Role: authenticated | Actions: Read (inherited from: anonymous)
Unconfigured roles inherit from: authenticated
Untuk opsi lengkap, lihat --show-effective-permissions.
Warisan vs. izin eksplisit
| Skenario | Recommendation |
|---|---|
| Semua peran harus memiliki akses yang sama | Tentukan sekali di anonymous; biarkan semua peran mewarisi |
| Pengguna terautentikasi memerlukan lebih banyak akses daripada anonim | Tentukan anonymous baca, tambahkan authenticated buat/perbarui |
Peran dengan nama tertentu membutuhkan akses yang lebih luas daripada authenticated |
Tentukan peran yang dinamai secara eksplisit; yang lain mewarisi dari authenticated |
Peran yang diberi nama membutuhkan lebih sedikit akses daripada authenticated |
Tentukan peran yang dinamakan secara jelas dan terinci dengan tindakan yang dipangkas |
| Entitas harus sepenuhnya privat | Hanya berikan peran bernama tertentu; biarkan authenticated dan anonymous tidak terdefinis |