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.
Jika Anda menggunakan editor online, fungsi pencocokan pola ditentukan di pojok kiri bawah.
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:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
Saat menggunakan fungsi pencocokan pola dalam domain/penyewa, Anda perlu mendaftarkan fungsi dengan enforcer dan model.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
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.