
Casbin4D adalah implementasi lintas platform (Firemonkey) untuk Delphi/Pascal dari Perpustakaan Otorisasi Populer Casbin. Ini memberikan dukungan untuk menegakkan otorisasi berdasarkan berbagai model kontrol akses.
Anda dengan hormat diundang untuk berbagi, garpu, meninjau dan meningkatkan perpustakaan ini. Silakan berkomentar dan menawarkan saran. Jika Anda ingin berkontribusi, periksa halaman wiki untuk pengembang terlebih dahulu
| Casbin | jcasbin | Node-Casbin | PHP-Casbin |
| siap-produksi | siap-produksi | siap-produksi | siap-produksi |
![]() | |||
|---|---|---|---|
| Pycasbin | Casbin4d | Casbin-net | Casbin-rs |
| siap-produksi | Eksperimental | siap-produksi | siap-produksi |
write-article , read-log . Itu tidak mengontrol akses ke artikel atau log tertentu.resource.Owner dapat digunakan untuk mendapatkan atribut untuk sumber daya./res/* , /res/:id dan metode http seperti GET , POST , PUT , DELETE .Di Casbin, model kontrol akses disarikan ke dalam file conf berdasarkan metamodel perm (kebijakan, efek, permintaan, pencocokan) . Jadi beralih atau meningkatkan mekanisme otorisasi untuk suatu proyek sama sederhana seperti memodifikasi konfigurasi. Anda dapat menyesuaikan model kontrol akses Anda sendiri dengan menggabungkan model yang tersedia. Misalnya, Anda bisa mendapatkan peran RBAC dan atribut ABAC bersama -sama di dalam satu model dan berbagi satu set aturan kebijakan.
Model paling mendasar dan paling sederhana di Casbin adalah ACL. ACL's Model Conf terlihat seperti ini:
# 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
Konfigurasi di atas mengikuti bahasa GO.
Casbin4d memahaminya tetapi Anda juga dapat menggunakan gaya khas Delphi/Pascal:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Kebijakan contoh untuk model ACL adalah seperti:
p, alice, data1, read
p, bob, data2, write
Untuk casbin ini berarti bahwa:
Kemudian, dalam aplikasi Anda membuat objek casbin (antarmuka) baru dan meneruskan file yang diperlukan:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
dan, akhirnya, uji (menegakkan) pernyataan:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Apa yang dilakukan Casbin:
{subject, object, action} atau formulir yang disesuaikan seperti yang Anda tetapkan, baik memungkinkan dan menolak otorisasi didukung.root atau administrator . Seorang superuser dapat melakukan apa saja tanpa izin yang menjelaskan.keyMatch dapat memetakan kunci sumber daya /foo/bar ke pola /foo*Apa yang tidak dilakukan Casbin:
username dan password saat pengguna masuk)Casbin4d hadir dalam paket (saat ini untuk Delphi 10.3 Rio) dan Anda dapat menginstalnya di IDE. Namun, tidak ada komponen visual yang berarti Anda dapat menggunakan unit secara independen dari paket. Cukup impor unit dalam proyek Anda (dengan asumsi Anda tidak keberatan dengan jumlah mereka)
Silakan lihat halaman wiki
Anda juga dapat menggunakan editor online (http://casbin.org/editor/) untuk menulis model dan kebijakan Casbin Anda di browser web Anda. Ini memberikan fungsionalitas seperti syntax highlighting dan code completion , seperti IDE untuk bahasa pemrograman.
Anda juga dapat menggunakan demo utama untuk menguji skrip dan pernyataan. Lihat demo
Lihat folder demo. Folder contoh berisi contoh konfigurasi dan file kebijakan dari implementasi GO asli
Demo utama berada di bawah demo/folder utama. Anda juga dapat menemukan file yang dapat dieksekusi di folder ini sehingga Anda dapat mengunduhnya dan mencoba casbin4d

Silakan lihat dokumentasinya
Casbin4D menyediakan satu titik akses untuk mengelola izin melalui ipolicyManager. Jika Anda terbiasa dengan implementasi lain, Anda akan melihat bahwa mereka memiliki dua set API (Manajemen API dan RBAC API). Implementasi ini menggabungkan keduanya di bawah manajer kebijakan
Di casbin4d, penyimpanan kebijakan disarikan melalui konsep adaptor. Konsumen Casbin4D bebas untuk mengimplementasikan manajemen penyimpanan kebijakan sesuai keinginan mereka. Untuk kenyamanan, casbin4d menyediakan dua adaptor: satu untuk file teks (.csv) dan satu adaptor memori. Anda dipersilakan (dan diundang) untuk menyumbangkan adaptor baru dengan penggunaan yang lebih luas. Tolong beri tahu kami
Casbin4D dirancang dengan mempertimbangkan multi-threading. Implementasi saat ini mencapai ini di level penegak
Ada proyek benchmark yang berlokasi di folder tolok ukur yang menguji penegakan kebijakan.
Proyek ini dijalankan di mesin/instalasi berikut:
* Dell XPS 15 9560: Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz, 2801MHz, 4 Core(s), 8 Logical Processor(s)
* Windows: Windows 10 Pro 64-bit, 10.0.16299 Build 16299
Hasilnya ditunjukkan pada tabel berikut. Overhead waktu dihitung per operasi (OP) yang mewakili satu panggilan ke TCasbin.enforce[..]
| Uji kasus | Ukuran | Waktu overhead | Overhead memori |
|---|---|---|---|
| BREATE RAW | 2 aturan (2 pengguna) | 0.000090 dtk/op | 0 kb |
| Model dasar | 2 aturan (2 pengguna) | 0,000466 dtk/op | 432 b |
| RBAC | 5 aturan (2 pengguna, 1 peran) | 0.000872 dtk/op | 352 b |
| RBAC (kecil) | 1.100 aturan (1.000 pengguna, 100 peran) | 0.238945 dtk/op | 1.49 MB |
| RBAC (sedang) | 11.000 aturan (10.000 pengguna, 1.000 peran) | 9.745707 Sec/Op | 15.7 MB |
| RBAC (dengan peran sumber daya) | 6 aturan (2 pengguna, 2 peran) | 0,000658 detik/op | 352 b |
| RBAC (dengan domain/penyewa) | 6 aturan (2 pengguna, 1 peran, 2 domain) | 0,000670 dtk/op | 352 b |
| RBAC (dengan DENY) | 6 aturan (2 pengguna, 1 peran) | 0,001260 dtk/op | 380 b |
| Abac | 0 aturan (0 pengguna) | 0,000181 dtk/op | 120 b |
| Keymatch | 2 aturan (2 pengguna) | 0,000782 dtk/op | 352 b |
| Prioritas | 9 aturan (2 pengguna, 2 peran) | 0.001124 Sec/Op | 380 b |
| Model | File model | File kebijakan |
|---|---|---|
| ACL | dasar_model.conf | BASIC_POLICY.CSV |
| ACL dengan superuser | BASIC_MODEL_WITH_ROOT.CONF | BASIC_POLICY.CSV |
| ACL tanpa pengguna | BASIC_MODEL_Without_Users.conf | BASIC_POLICY_Without_users.csv |
| ACL tanpa sumber daya | BASIC_MODEL_Without_resources.conf | BASIC_POLICY_Without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC dengan peran sumber daya | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC dengan domain/penyewa | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| Abac | abac_model.conf | N/a |
| Tenang | keymatch_model.conf | keymatch_policy.csv |
| Deny-override | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Prioritas | prioritas_model.conf | prioritas_policy.csv |
Sebagian besar tes implementasi asli di Go telah diimpor di Delphi. Silakan lihat tesnya
Anda dapat memeriksa cakupan kode di sini untuk status terbaru. Anda dipersilakan untuk meningkatkan tes dan cakupannya
Proyek ini dilisensikan di bawah lisensi Apache 2.0.
Jika Anda memiliki masalah atau permintaan fitur, silakan hubungi kami. PR dipersilakan