
Casbin4D是一個跨平台(Firemonkey)的實現,用於流行授權庫Casbin的Delphi/Pascal。它提供了基於各種訪問控制模型來執行授權的支持。
誠摯地邀請您分享,分叉,審查和改進此庫。請隨時發表評論並提供建議。如果您想貢獻,請首先檢查開發人員的Wiki頁面
| 卡斯賓 | jcasbin | 節點casbin | PHP-Casbin |
| 準備生產 | 準備生產 | 準備生產 | 準備生產 |
![]() | |||
|---|---|---|---|
| Pycasbin | Casbin4d | 卡斯賓網絡 | Casbin-Rs |
| 準備生產 | 實驗 | 準備生產 | 準備生產 |
write-article , read-log等權限,有些方案可能針對某種資源而不是單個資源。它不能控制對特定文章或日誌的訪問。resource.Owner可以用來獲取資源的屬性。/res/* , /res/:id和HTTP方法之類的路徑,例如GET , POST , PUT , DELETE 。在Casbin中,將訪問控制模型抽象成基於PERM MetAmodel(策略,效果,請求,匹配器)的conf文件。因此,切換或升級項目的授權機制就像修改配置一樣簡單。您可以通過組合可用的模型來自定義自己的訪問控制模型。例如,您可以在一個模型中將RBAC角色和ABAC屬性放在一起,並共享一組策略規則。
Casbin中最基本,最簡單的模型是ACL。 ACL的模型conf看起來像這樣:
# 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,這意味著:
然後,在您的應用程序中,實例化了一個新的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 。超級用戶可以在沒有解釋權限的情況下做任何事情。keyMatch可以將資源鍵/foo/bar映射到模式/foo*Casbin不做什麼:
username和password )Casbin4D包含一個軟件包(目前適用於Delphi 10.3 Rio),您可以將其安裝在IDE中。但是,沒有視覺組件,這意味著您可以獨立於包裝使用這些單元。只是導入項目中的單位(假設您不介意其數量)
請參閱Wiki頁面
您還可以使用在線編輯器(http://casbin.org/editor/)在Web瀏覽器中編寫CASBIN模型和策略。它提供功能,例如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 sec/op | 432 b |
| RBAC | 5條規則(2個用戶,1個角色) | 0.000872 sec/op | 352 b |
| rbac(小) | 1,100條規則(1,000個用戶,100個角色) | 0.238945 sec/op | 1.49 MB |
| RBAC(媒介) | 11,000條規則(10,000個用戶,1,000個角色) | 9.745707 sec/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 |
| 阿巴克 | 0規則(0用戶) | 0.000181 sec/op | 120 b |
| Keymatch | 2條規則(2個用戶) | 0.000782 sec/op | 352 b |
| 優先事項 | 9規則(2個用戶,2個角色) | 0.001124 sec/op | 380 b |
| 模型 | 型號文件 | 策略文件 |
|---|---|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL與超級用戶 | basic_model_with_root.conf | basic_policy.csv |
| 沒有用戶的ACL | basic_model_without_users.conf | basic_policy_without_users.csv |
| 沒有資源的ACL | basic_model_without_resources.conf | basic_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_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 |
在Delphi中進口了GO中原始實施的絕大多數測試。請參閱測試
您可以在此處查看代碼覆蓋範圍以獲取最新狀態。歡迎您改善測試和覆蓋範圍
該項目是根據Apache 2.0許可證獲得許可的。
如果您有任何問題或功能請求,請與我們聯繫。 PR歡迎