
Casbin4D เป็นแพลตฟอร์มข้าม (FireMonkey) การใช้งานสำหรับ Delphi/Pascal ของห้องสมุดการอนุญาตยอดนิยม Casbin ให้การสนับสนุนสำหรับการบังคับใช้การอนุญาตตามรูปแบบการควบคุมการเข้าถึงที่หลากหลาย
คุณได้รับเชิญให้แบ่งปันส้อมตรวจสอบและปรับปรุงห้องสมุดนี้อย่างจริงใจ โปรดอย่าลังเลที่จะแสดงความคิดเห็นและเสนอคำแนะนำ หากคุณต้องการมีส่วนร่วมให้ตรวจสอบหน้า wiki สำหรับนักพัฒนาก่อน
| คาบบิน | jcasbin | โหนดคาสบิน | php-casbin |
| พร้อมผลิต | พร้อมผลิต | พร้อมผลิต | พร้อมผลิต |
![]() | |||
|---|---|---|---|
| Pycasbin | Casbin4D | ซองบิน | Casbin-RS |
| พร้อมผลิต | เกี่ยวกับการทดลอง | พร้อมผลิต | พร้อมผลิต |
write-article , read-log มันไม่ได้ควบคุมการเข้าถึงบทความหรือบันทึกเฉพาะresource.Owner สามารถใช้เพื่อรับแอตทริบิวต์สำหรับทรัพยากร/res/* , /res/:id และวิธี HTTP เช่น GET , POST , PUT , DELETEใน Casbin รูปแบบการควบคุมการเข้าถึงจะถูกแยกออกเป็นไฟล์ CONF โดยใช้ Metamodel PERM (นโยบาย, เอฟเฟกต์, การร้องขอ, การจับคู่) ดังนั้นการสลับหรืออัพเกรดกลไกการอนุญาตสำหรับโครงการจึงง่ายพอ ๆ กับการปรับเปลี่ยนการกำหนดค่า คุณสามารถปรับแต่งรูปแบบการควบคุมการเข้าถึงของคุณเองโดยรวมรุ่นที่มีอยู่ ตัวอย่างเช่นคุณสามารถรับบทบาท RBAC และแอตทริบิวต์ ABAC เข้าด้วยกันภายในแบบจำลองเดียวและแบ่งปันกฎนโยบายหนึ่งชุด
แบบจำลองพื้นฐานและง่ายที่สุดใน Casbin คือ ACL โมเดลของ ACL มีลักษณะเช่นนี้:
# 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
การกำหนดค่าข้างต้นเป็นไปตามภาษา GO
Casbin4D เข้าใจ แต่คุณยังสามารถใช้สไตล์ Delphi/Pascal ทั่วไป:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
ตัวอย่างนโยบายสำหรับโมเดล ACL เป็นเช่น:
p, alice, data1, read
p, bob, data2, write
สำหรับคาสบินหมายความว่า:
จากนั้นในแอปพลิเคชันของคุณอินสแตนซ์ออบเจ็กต์ Casbin (เชื่อมต่อ) ใหม่และส่งผ่านไฟล์ที่ต้องการ:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
และในที่สุดการทดสอบ (บังคับ) การยืนยัน:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
คาสบินทำอะไร:
{subject, object, action} แบบฟอร์มหรือแบบฟอร์มที่กำหนดเองตามที่คุณกำหนดทั้งอนุญาตและปฏิเสธการอนุญาตroot หรือ administrator Superuser สามารถทำอะไรก็ได้โดยไม่ต้องมีการอธิบายการอนุญาตkeyMatch สามารถแมปคีย์ทรัพยากร /foo/bar กับ pattern /foo*คาสบินไม่ได้ทำอะไร:
username และ password เมื่อผู้ใช้เข้าสู่ระบบ)Casbin4D มาในแพ็คเกจ (ปัจจุบันสำหรับ Delphi 10.3 Rio) และคุณสามารถติดตั้งได้ใน IDE อย่างไรก็ตามไม่มีองค์ประกอบภาพซึ่งหมายความว่าคุณสามารถใช้หน่วยที่เป็นอิสระจากแพ็คเกจ เพียงแค่นำเข้าหน่วยในโครงการของคุณ (สมมติว่าคุณไม่สนใจจำนวนของพวกเขา)
โปรดดูหน้า Wiki
นอกจากนี้คุณยังสามารถใช้ตัวแก้ไขออนไลน์ (http://casbin.org/editor/) เพื่อเขียนโมเดลและนโยบายของคุณในเว็บเบราว์เซอร์ของคุณ มันมีฟังก์ชั่นการใช้งานเช่น syntax highlighting และ code completion เช่นเดียวกับ IDE สำหรับภาษาการเขียนโปรแกรม
คุณสามารถใช้การสาธิตหลักเพื่อทดสอบสคริปต์และการยืนยัน ดูการสาธิต
ดูโฟลเดอร์การสาธิต โฟลเดอร์ตัวอย่างมีตัวอย่างการกำหนดค่าและไฟล์นโยบายจากการใช้งาน GO ดั้งเดิม
การสาธิตหลักอยู่ภายใต้การสาธิต/โฟลเดอร์หลัก คุณสามารถค้นหาไฟล์ที่เรียกใช้งานได้ในโฟลเดอร์นี้เพื่อให้คุณสามารถดาวน์โหลดและลอง Casbin4D

โปรดดูเอกสารประกอบ
CASBIN4D ให้การเข้าถึงจุดหนึ่งในการจัดการสิทธิ์ผ่าน iPolicyManager หากคุณคุ้นเคยกับการใช้งานอื่น ๆ คุณจะสังเกตเห็นว่าพวกเขามี API สองชุด (API การจัดการและ RBAC API) การดำเนินการนี้รวมทั้งสองอย่างภายใต้ผู้จัดการนโยบาย
ใน Casbin4D การจัดเก็บนโยบายจะถูกแยกออกผ่านแนวคิดของอะแดปเตอร์ ผู้บริโภคของ Casbin4D มีอิสระที่จะใช้การจัดการการจัดเก็บนโยบายตามที่พวกเขาเห็นว่าเหมาะสมกับความต้องการของพวกเขา เพื่อความสะดวก CASBIN4D มีอะแดปเตอร์สองตัว: หนึ่งไฟล์สำหรับไฟล์ข้อความ (.CSV) และอะแดปเตอร์หน่วยความจำหนึ่งตัว ยินดีต้อนรับคุณ (และได้รับเชิญ) เพื่อสนับสนุนอะแดปเตอร์ใหม่ที่มีการใช้งานที่กว้างขึ้น โปรดแจ้งให้เราทราบ
Casbin4D ได้รับการออกแบบโดยคำนึงถึงมัลติเธรดในใจ การใช้งานปัจจุบันบรรลุเป้าหมายนี้ในระดับผู้บังคับ
มีโครงการมาตรฐานที่ตั้งอยู่ในโฟลเดอร์มาตรฐานซึ่งทดสอบการบังคับใช้นโยบาย
โครงการถูกดำเนินการในเครื่อง/การติดตั้งต่อไปนี้:
* 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
ผลลัพธ์จะแสดงในตารางต่อไปนี้ ค่าโสหุ้ยเวลาจะถูกคำนวณต่อการดำเนินการ (OP) ซึ่งแสดงถึงการโทรครั้งเดียวไปยัง TCasbin.enforce[..]
| กรณีทดสอบ | ขนาด | ค่าใช้จ่าย | หน่วยความจำค่าใช้จ่าย |
|---|---|---|---|
| การบังคับใช้ดิบ | 2 กฎ (2 ผู้ใช้) | 0.000090 วินาที/op | 0 KB |
| โมเดลพื้นฐาน | 2 กฎ (2 ผู้ใช้) | 0.000466 วินาที/op | 432 b |
| RBAC | 5 กฎ (2 ผู้ใช้, 1 บทบาท) | 0.000872 วินาที/op | 352 b |
| RBAC (เล็ก) | 1,100 กฎ (1,000 ผู้ใช้, 100 บทบาท) | 0.238945 วินาที/op | 1.49 MB |
| RBAC (ปานกลาง) | 11,000 กฎ (ผู้ใช้ 10,000 คน 1,000 บทบาท) | 9.745707 วินาที/op | 15.7 MB |
| RBAC (พร้อมบทบาททรัพยากร) | 6 กฎ (2 ผู้ใช้ 2 บทบาท) | 0.000658 วินาที/op | 352 b |
| RBAC (พร้อมโดเมน/ผู้เช่า) | 6 กฎ (2 ผู้ใช้, 1 บทบาท, 2 โดเมน) | 0.000670 วินาที/op | 352 b |
| RBAC (พร้อมปฏิเสธ) | 6 กฎ (2 ผู้ใช้ 1 บทบาท) | 0.001260 วินาที/op | 380 b |
| ABAC | 0 กฎ (0 ผู้ใช้) | 0.000181 วินาที/op | 120 b |
| คีย์ช์ | 2 กฎ (2 ผู้ใช้) | 0.000782 วินาที/op | 352 b |
| ลำดับความสำคัญ | 9 กฎ (2 ผู้ใช้ 2 บทบาท) | 0.001124 วินาที/op | 380 b |
| แบบอย่าง | ไฟล์โมเดล | ไฟล์นโยบาย |
|---|---|---|
| ACL | masic_model.conf | basic_policy.csv |
| ACL กับ superuser | masic_model_with_root.conf | basic_policy.csv |
| ACL ที่ไม่มีผู้ใช้ | masic_model_without_users.conf | masic_policy_without_users.csv |
| ACL โดยไม่มีทรัพยากร | masic_model_without_resources.conf | masic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC พร้อมบทบาททรัพยากร | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC กับโดเมน/ผู้เช่า | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N/A |
| สงบ | keymatch_model.conf | keymatch_policy.csv |
| การปฏิเสธ | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| ลำดับความสำคัญ | priority_model.conf | priority_policy.csv |
การทดสอบส่วนใหญ่ของการใช้งานดั้งเดิมใน GO ได้ถูกนำเข้าใน Delphi โปรดดูการทดสอบ
คุณสามารถตรวจสอบความครอบคลุมของรหัสที่นี่เพื่อรับสถานะล่าสุด คุณสามารถปรับปรุงการทดสอบและความครอบคลุมได้
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache 2.0
หากคุณมีปัญหาหรือคำขอคุณสมบัติใด ๆ โปรดติดต่อเรา ยินดีต้อนรับ PR