How It Works
Di Casbin, model kontrol akses diabstraksikan menjadi file CONF berdasarkan metamodel PERM (Policy, Effect, Request, Matchers). Mengganti atau meningkatkan mekanisme otorisasi untuk sebuah proyek sama mudahnya dengan mengubah konfigurasi. Anda dapat menyesuaikan model kontrol akses Anda sendiri dengan menggabungkan model yang tersedia. Misalnya, Anda dapat menggabungkan peran RBAC dan atribut ABAC dalam satu model dan berbagi satu set aturan kebijakan.
Model PERM terdiri dari empat dasar: Policy, Effect, Request, dan Matchers. Dasar-dasar ini menjelaskan hubungan antara sumber daya dan pengguna.
Request
Menentukan parameter permintaan. Sebuah permintaan dasar adalah objek tuple, yang memerlukan setidaknya subjek (entitas yang diakses), objek (sumber daya yang diakses), dan aksi (metode akses).
Misalnya, definisi permintaan mungkin terlihat seperti ini:
Definisi ini menentukan nama dan urutan parameter yang diperlukan oleh fungsi pencocokan kontrol akses.
Policy
Menentukan model untuk strategi akses. Ini menentukan nama dan urutan bidang dalam dokumen aturan Kebijakan.
Misalnya:
Catatan: Jika eft (hasil kebijakan) tidak didefinisikan, bidang hasil dalam file kebijakan tidak akan dibaca, dan hasil kebijakan yang cocok akan diizinkan secara default.
Matcher
Mendefinisikan aturan pencocokan untuk Permintaan dan Kebijakan.
Sebagai contoh: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj
Hasil dari strategi akan disimpan dalam p.eft
.
Effect
Melakukan penilaian kombinasi logis pada hasil pencocokan Matchers.
Sebagai contoh: e = some(where(p.eft == allow))
Pernyataan ini berarti bahwa jika hasil strategi pencocokan p.eft
memiliki hasil (beberapa) izinkan, maka hasil akhirnya adalah benar.
Mari kita lihat contoh lain:
e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
Arti logis dari kombinasi contoh ini adalah: jika ada strategi yang cocok dengan hasil izinkan dan tidak ada strategi yang cocok dengan hasil tolak, maka hasilnya benar. Dengan kata lain, itu benar ketika semua strategi yang cocok adalah izinkan. Jika ada yang tolak, keduanya salah (lebih sederhana, ketika izinkan dan tolak ada pada saat yang sama, tolak mendahului).
Model paling dasar dan paling sederhana di Casbin adalah ACL. Konfigurasi model untuk ACL adalah sebagai 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 kebijakan untuk model ACL adalah:
p, alice, data1, read
p, bob, data2, write
Ini berarti:
- alice dapat membaca data1
- bob dapat menulis data2
Kami juga mendukung mode multi-baris dengan menambahkan '' di akhir:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Selanjutnya, jika Anda menggunakan ABAC, Anda dapat mencoba operator 'in' seperti yang ditunjukkan dalam contoh berikut untuk edisi golang Casbin (jCasbin dan Node-Casbin belum didukung):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Tetapi Anda HARUS memastikan bahwa panjang array tersebut LEBIH dari 1, jika tidak, hal ini akan menyebabkan panic.
Untuk operator lainnya, Anda dapat melihat govaluate.