
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欢迎