Pewarisan peran dalam penyusun API Data

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 ke anonymous.
  • Jika authenticated tidak memiliki blok izin, DAB menggunakan anonymous blok.
  • Jika anonymous tidak memiliki blok izin, permintaan ditolak dengan 403 Forbidden.

Bagaimana pewarisan diselesaikan

Ketika DAB mengevaluasi permintaan, ia menentukan peran efektif dan kemudian mengikuti hierarki pewarisan untuk menemukan blok izin.

  1. DAB mengidentifikasi peran efektif dari permintaan (melalui X-MS-API-ROLE header, klaim token, atau default).
  2. DAB mencari sebuah blok izin eksplisit di entities.<name>.permissions yang cocok dengan peran yang efektif.
  3. Jika tidak ada blok yang cocok, DAB menelusuri rantai: authenticatedanonymous.
  4. Blok pencocokan pertama yang ditemukan menyediakan izin untuk permintaan tersebut.
  5. 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