Lewati ke konten utama

RBAC with Pattern

Mulai Cepat

  • Gunakan pola dalam g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Gunakan pola dengan domain.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Gunakan semua pola.

    Gabungkan penggunaan kedua API tersebut.

Seperti yang ditunjukkan di atas, setelah Anda membuat instance enforcer, Anda perlu mengaktifkan pencocokan pola melalui API AddNamedMatchingFunc dan AddNamedDomainMatchingFunc, yang menentukan bagaimana pola dicocokkan.

catatan

Jika Anda menggunakan editor online, fungsi pencocokan pola ditentukan di pojok kiri bawah. editor-tips

Gunakan pencocokan pola dalam RBAC

Terkadang, Anda ingin subjek, objek, atau domain/penyewa tertentu dengan pola tertentu secara otomatis diberikan peran. Fungsi pencocokan pola dalam RBAC dapat membantu Anda melakukannya. Fungsi pencocokan pola memiliki parameter dan nilai kembali yang sama dengan fungsi pencocok sebelumnya matcher function.

Fungsi pencocokan pola mendukung setiap parameter dari g.

Kita tahu bahwa biasanya RBAC diekspresikan sebagai g(r.sub, p.sub) dalam pencocok. Kemudian kita dapat menggunakan kebijakan seperti:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

Jadi alice dapat membaca semua buku termasuk book 1 dan book 2. Tetapi bisa ada ribuan buku, dan sangat membosankan untuk menambahkan setiap buku ke peran buku (atau grup) dengan satu aturan kebijakan g.

Tetapi dengan fungsi pencocokan pola, Anda dapat menulis kebijakan hanya dengan satu baris:

g, /book/:id, book_group

Casbin akan secara otomatis mencocokkan /book/1 dan /book/2 ke pola /book/:id untuk Anda. Anda hanya perlu mendaftarkan fungsi dengan enforcer seperti:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Saat menggunakan fungsi pencocokan pola dalam domain/penyewa, Anda perlu mendaftarkan fungsi dengan enforcer dan model.

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Jika Anda tidak mengerti apa arti g(r.sub, p.sub, r.dom), silakan baca rbac-with-domains. Singkatnya, g(r.sub, p.sub, r.dom) akan memeriksa apakah pengguna r.sub memiliki peran p.sub dalam domain r.dom. Jadi beginilah cara kerja matcher. Anda dapat melihat contoh lengkap di sini.

Selain sintaks pencocokan pola di atas, kita juga dapat menggunakan pola domain murni.

Misalnya, jika kita ingin sub memiliki akses di berbagai domain, domain1 dan domain2, kita dapat menggunakan pola domain murni:

p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write

g, alice, admin, *
g, bob, admin, domain2

Dalam contoh ini, kita ingin alice membaca dan menulis data di domain1 dan domain2. Pencocokan pola * di g membuat alice memiliki akses ke dua domain.

Dengan menggunakan pencocokan pola, terutama dalam skenario yang lebih rumit dan memiliki banyak domain atau objek untuk dipertimbangkan, kita dapat mengimplementasikan policy_definition dengan cara yang lebih elegan dan efektif.