Langkau ke kandungan utama

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.

nota

Jika anda menggunakan editor dalam talian, ia menentukan fungsi pemadanan corak di bahagian kiri bawah. editor-tips

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:

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

Apabila menggunakan fungsi pencocokan pola dalam domain/penyewa, anda perlu mendaftarkan fungsi tersebut dengan enforcer dan model.

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

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.