RBAC with Pattern
Mulakan dengan Cepat
Gunakan corak dalam
g(_, _)
.e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)Gunakan corak dengan domain.
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
Gunakan semua corak.
Gabungkan penggunaan kedua-dua API.
Seperti yang ditunjukkan di atas, setelah anda mencipta instance enforcer
, anda perlu mengaktifkan pencocokan corak melalui API AddNamedMatchingFunc
dan AddNamedDomainMatchingFunc
, yang menentukan bagaimana corak dicocokkan.
Jika anda menggunakan editor dalam talian, ia menentukan fungsi pemadanan corak di bahagian kiri bawah.
Gunakan pemadanan corak dalam RBAC
Kadang kala, anda mahu subjek, objek, atau domain/penyewa tertentu dengan corak tertentu diberi peranan secara automatik. Fungsi pemadanan corak dalam RBAC boleh membantu anda melakukan itu. Fungsi pemadanan corak berkongsi parameter dan nilai pulangan yang sama dengan fungsi penapis sebelumnya matcher function.
Fungsi pemadanan corak menyokong setiap parameter g
.
Kita tahu bahawa biasanya RBAC dinyatakan sebagai g(r.sub, p.sub)
dalam penapis. Kemudian kita boleh menggunakan polisi seperti:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
Jadi alice
boleh membaca semua buku termasuk book 1
dan book 2
. Tetapi mungkin terdapat beribu-ribu buku, dan sangat membosankan untuk menambah setiap buku ke dalam peranan buku (atau kumpulan) dengan satu peraturan g
.
Tetapi dengan fungsi pencocokan pola, anda boleh menulis polisi dengan hanya satu baris:
g, /book/:id, book_group
Casbin akan secara automatik mencocokkan /book/1
dan /book/2
ke dalam pola /book/:id
untuk anda. Anda hanya perlu mendaftarkan fungsi tersebut dengan enforcer seperti:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
Apabila menggunakan fungsi pencocokan pola dalam domain/penyewa, anda perlu mendaftarkan fungsi tersebut dengan enforcer dan model.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
Jika anda tidak memahami apa yang g(r.sub, p.sub, r.dom)
maksudkan, sila baca rbac-with-domains. Secara ringkas, g(r.sub, p.sub, r.dom)
akan memeriksa sama ada pengguna r.sub
mempunyai peranan p.sub
dalam domain r.dom
. Jadi beginilah cara pencocokan pola berfungsi. Anda boleh melihat contoh lengkap di sini.
Selain daripada sintaks pencocokan pola di atas, kita juga boleh menggunakan pola domain tulen.
Sebagai contoh, jika kita ingin sub
mempunyai akses dalam domain yang berbeza, domain1
dan domain2
, kita boleh menggunakan corak domain tulen:
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
dalam domain1 dan domain2. Pencocokan corak *
dalam g
membolehkan alice
mempunyai akses ke dua domain.
Dengan menggunakan pencocokan corak, terutama dalam senario yang lebih kompleks dan mempunyai banyak domain atau objek untuk dipertimbangkan, kita boleh melaksanakan policy_definition
dengan cara yang lebih elegan dan efektif.