Langkau ke kandungan utama

How It Works

Dalam Casbin, model kawalan akses diabstrakkan ke dalam fail CONF berdasarkan model metamodel PERM (Policy, Effect, Request, Matchers). Menukar atau menaik taraf mekanisme pengkalan untuk satu projek adalah semudah mengubah suai konfigurasi. Anda boleh menyesuaikan model kawalan akses anda sendiri dengan menggabungkan model yang ada. Sebagai contoh, anda boleh menggabungkan peranan RBAC dan atribut ABAC bersama dalam satu model dan berkongsi satu set peraturan dasar.

Model PERM terdiri daripada empat asas: Policy, Effect, Request, dan Matchers. Asas-asas ini menerangkan hubungan antara sumber dan pengguna.

Request

Menentukan parameter permintaan. Permintaan asas adalah objek tuple, memerlukan sekurang-kurangnya subjek (entiti yang diakses), objek (sumber yang diakses), dan tindakan (cara akses).

Contohnya, definisi permintaan mungkin kelihatan seperti ini:

Definisi ini menentukan nama dan susunan parameter yang diperlukan oleh fungsi pemadanan kawalan akses.

Policy

Menentukan model untuk strategi akses. Ia menetapkan nama dan susunan medan dalam dokumen peraturan Polisi.

Contohnya:

Perhatian: Jika eft (hasil polisi) tidak ditentukan, medan hasil dalam fail polisi tidak akan dibaca, dan hasil polisi pemadanan akan dibenarkan secara lalai.

Matcher

Menentukan peraturan padanan untuk Permintaan dan Polisi.

Sebagai contoh: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj Hasil strategi akan disimpan dalam p.eft.

Effect

Melakukan penilaian gabungan logik pada hasil padanan Matchers.

Sebagai contoh: e = some(where(p.eft == allow))

Pernyataan ini bermaksud bahawa jika hasil strategi padanan p.eft mempunyai hasil (beberapa) izin, maka hasil akhir adalah benar.

Mari kita lihat contoh lain:

e = some(where (p.eft == allow)) && !some(where (p.eft == deny))

Makna logik bagi gabungan contoh ini ialah: jika terdapat strategi yang sepadan dengan hasil izinkan dan tiada strategi yang sepadan dengan hasil tolak, hasilnya adalah benar. Dalam erti kata lain, ia adalah benar apabila semua strategi yang sepadan adalah izinkan. Jika terdapat sebarang tolak, kedua-duanya adalah palsu (lebih mudah, apabila izinkan dan tolak wujud pada masa yang sama, tolak mengambil keutamaan).

Model yang paling asas dan paling mudah dalam Casbin ialah ACL. Konfigurasi CONF untuk ACL adalah seperti berikut:

# Request definition
[request_definition]
r = sub, obj, act

# Policy definition
[policy_definition]
p = sub, obj, act

# Policy effect
[policy_effect]
e = some(where (p.eft == allow))

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

Contoh polisi untuk model ACL ialah:

p, alice, data1, read
p, bob, data2, write

Ini bermakna:

  • alice boleh membaca data1
  • bob boleh menulis data2

Kami juga menyokong mod multi-baris dengan menambahkan '' di hujung:

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act

Selain itu, jika anda menggunakan ABAC, anda boleh mencuba operator 'in' seperti yang ditunjukkan dalam contoh berikut untuk edisi golang Casbin (jCasbin dan Node-Casbin masih belum disokong):

# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

Tetapi anda HARUS memastikan bahawa panjang array itu LEBIH daripada 1, jika tidak ia akan menyebabkan kepanikan.

Untuk lebih banyak operator, anda boleh melihat govaluate.