
Casbin4Dは、人気のある認可ライブラリCasbinのDelphi/Pascalのクロスプラットフォーム(Firemonkey)の実装です。さまざまなアクセス制御モデルに基づいて、許可を実施するためのサポートを提供します。
このライブラリを共有、フォーク、レビュー、改善するために心から招待されています。お気軽にコメントして提案を提供してください。貢献したい場合は、最初に開発者のWikiページをチェックしてください
| カスビン | jcasbin | ノードカスビン | php-casbin |
| 生産準備 | 生産準備 | 生産準備 | 生産準備 |
![]() | |||
|---|---|---|---|
| ピカスビン | Casbin4d | カスビンネット | Casbin-rs |
| 生産準備 | 実験的 | 生産準備 | 生産準備 |
write-article 、 read-logなどのアクセス許可を使用して、個々のリソースの代わりにタイプのリソースをターゲットにする場合があります。特定の記事やログへのアクセスを制御しません。resource.Ownerを使用して、リソースの属性を取得できます。/res/* 、 /res/:idおよびhttpメソッドGETのパスPUTサポートDELETEますPOSTCasbinでは、アクセス制御モデルがPermer Metamodel(ポリシー、エフェクト、リクエスト、マッチャー)に基づいたconfファイルに抽象化されます。したがって、プロジェクトの承認メカニズムの切り替えまたはアップグレードは、構成を変更するのと同じくらい簡単です。利用可能なモデルを組み合わせて、独自のアクセス制御モデルをカスタマイズできます。たとえば、1つのモデル内でRBACの役割とABAC属性を取得し、1つのポリシールールセットを共有できます。
カスビンで最も基本的で最も単純なモデルは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
カスビンにとってこれはそれを意味します:
次に、アプリケーションで新しいカスビン(インターフェース)オブジェクトをインスタンス化し、必要なファイルを渡します。
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*カスビンがしていないこと:
usernameとpasswordを確認)Casbin4Dはパッケージ(現在Delphi 10.3 Rio用)に入っており、IDEにインストールできます。ただし、視覚的なコンポーネントはありません。つまり、パッケージとは独立してユニットを使用できることを意味します。プロジェクトにユニットをインポートするだけです(それらの数を気にしないと仮定します)
Wikiページをご覧ください
また、オンラインエディター(http://casbin.org/editor/)を使用して、CasbinモデルとポリシーをWebブラウザーに記述することもできます。プログラミング言語のIDEのように、 syntax highlightingやcode completionなどの機能を提供します。
また、メインデモを使用して、スクリプトとアサーションをテストすることもできます。デモを参照してください
デモフォルダーを参照してください。例フォルダーには、元のGO実装からの例の構成とポリシーファイルが含まれています
メインデモは、デモ/メインフォルダーの下にあります。また、このフォルダーに実行可能ファイルを見つけることができ、それをダウンロードしてCasbin4Dを試すことができます

ドキュメントをご覧ください
Casbin4Dは、iPolicyManagerを介してアクセス許可を管理するためのアクセスの1つのポイントを提供します。他の実装に精通している場合、2セットのAPI(管理APIおよびRBAC API)があることに気付くでしょう。この実装は、それらの両方をポリシーマネージャーの下に組み合わせています
Casbin4Dでは、ポリシーストレージはアダプターの概念を介して抽象化されています。 Casbin4Dの消費者は、彼らのニーズに適していると考えているため、ポリシーストレージの管理を自由に実装できます。便利なため、Casbin4Dは2つのアダプターを提供します。1つはテキストファイル(.CSV)と1つのメモリアダプターです。より広い使用法で新しいアダプターを提供することを歓迎します(そして招待されました)。お知らせください
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
結果を次の表に示します。 TCasbin.enforce[..]への単一の呼び出しを表す操作(OP)ごとに時間オーバーヘッドが計算されます。
| テストケース | サイズ | 時間オーバーヘッド | メモリオーバーヘッド |
|---|---|---|---|
| 生施設 | 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 | 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 | 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は大歓迎です