casbin / casbin
为 PHP 项目提供强大而高效的开放源代码访问控制库。
Requires
- php: >=7.1.0
- s1lentium/iptools: ^1.1
- symfony/expression-language: ^3.4|^4.0|^5.0|^6.0|^7.0
Requires (Dev)
- mockery/mockery: ^1.2
- php-coveralls/php-coveralls: ^2.1
- phpstan/phpstan: ^1.2
- phpunit/phpunit: ~7.0|~8.0|~9.0
- dev-master
- 4.x-dev
- v3.25.1
- v3.25.0
- v3.24.0
- v3.23.0
- v3.22.0
- v3.21.6
- v3.21.5
- v3.21.4
- v3.21.3
- v3.21.2
- v3.21.1
- v3.21.0
- v3.20.3
- v3.20.2
- v3.20.1
- v3.20.0
- v3.19.0
- v3.18.7
- v3.18.6
- v3.18.5
- v3.18.4
- v3.18.3
- v3.18.2
- v3.18.1
- v3.18.0
- v3.17.0
- v3.16.0
- v3.15.0
- v3.14.0
- v3.13.0
- v3.12.0
- v3.11.0
- v3.10.0
- v3.9.0
- v3.8.0
- v3.7.0
- v3.6.0
- v3.5.0
- v3.4.1
- v3.4.0
- v3.3.1
- v3.3.0
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- 1.x-dev
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.2.1
- v0.2
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1
- dev-develop
This package is auto-updated.
Last update: 2024-09-22 16:12:57 UTC
README
Breaking News: Laravel-authz 现在可用,是一个 Laravel 框架的授权库。
PHP-Casbin 是一个强大而高效的 PHP 项目开放源代码访问控制库。它提供了根据各种 访问控制模型 执行授权的支持。
Casbin 所支持的所有语言
安装
在项目的 composer.json
中要求此包。这将下载该包
composer require casbin/casbin
开始使用
- 使用模型文件和政策文件创建一个 Casbin 执法器
require_once './vendor/autoload.php'; use Casbin\Enforcer; $e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
- 在访问发生之前将执行钩子添加到您的代码中
$sub = "alice"; // the user that wants to access a resource. $obj = "data1"; // the resource that is going to be accessed. $act = "read"; // the operation that the user performs on the resource. if ($e->enforce($sub, $obj, $act) === true) { // permit alice to read data1 } else { // deny the request, show an error }
目录
支持的模型
- ACL(访问控制列表)
- 带 超级用户 的 ACL
- 无用户 ACL:特别适用于没有身份验证或用户登录的系统。
- 无资源 ACL:某些场景可能通过使用权限(如
write-article
、read-log
)针对资源类型而不是单个资源进行目标定位。它不控制对特定文章或日志的访问。 - RBAC(基于角色的访问控制)
- 带资源角色的 RBAC:用户和资源可以同时拥有角色(或组)。
- 带域/租户的 RBAC:用户可以为不同的域/租户拥有不同的角色集。
- ABAC(基于属性的访问控制):可以使用
resource.Owner
这样的语法糖来获取资源的属性。 - RESTful:支持路径如
/res/*
、/res/:id
和 HTTP 方法如GET
、POST
、PUT
、DELETE
。 - Deny-override:支持允许和拒绝授权,拒绝优先于允许。
- 优先级:策略规则可以被优先级排序,就像防火墙规则一样。
它是如何工作的?
在 php-casbin 中,访问控制模型被抽象为一个基于 PERM 元模型(策略、效果、请求、匹配器) 的 CONF 文件。因此,切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用的模型来自定义自己的访问控制模型。例如,您可以在一个模型中将 RBAC 角色和 ABAC 属性结合起来,并共享一组策略规则。
php-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
ACL模型的示例策略如下:
p, alice, data1, read
p, bob, data2, write
这意味着:
- alice可以读取data1
- bob可以写入data2
功能
php-casbin的功能:
- 在经典格式
{主体,对象,动作}
或自定义格式中执行策略,支持允许和拒绝授权。 - 处理访问控制模型及其策略的存储。
- 管理角色-用户映射和角色-角色映射(即RBAC中的角色层次结构)。
- 支持内置超级用户,如
root
或管理员
。超级用户可以执行任何操作而无需显式权限。 - 提供多个内置运算符以支持规则匹配。例如,
keyMatch
可以将资源键/foo/bar
映射到模式/foo*
。
php-casbin不做什么:
- 身份验证(即在用户登录时验证
用户名
和密码
) - 管理用户或角色列表。我相信项目本身管理这些实体更方便。用户通常有自己的密码,php-casbin并非设计为密码容器。然而,php-casbin为RBAC场景存储用户-角色映射。
文档
https://casbin.org/docs/en/overview
在线编辑器
您还可以使用在线编辑器(http://casbin.org/editor/)在您的浏览器中编写php-casbin模型和策略。它提供类似于编程语言IDE的功能,如语法高亮
和代码补全
。
教程
https://casbin.org/docs/tutorials
策略管理
php-casbin提供了两组API来管理权限:
策略持久化
https://casbin.org/docs/en/adapters
角色管理器
https://casbin.org/docs/en/role-managers
示例
中间件
适用于Web框架的Authz中间件:[https://casbin.org/docs/en/middlewares]
我们的采用者
https://casbin.org/docs/en/adopters
贡献者
支持者
感谢所有支持者!🙏 [成为支持者]
赞助商
通过成为赞助商来支持此项目。您的标志将在此处显示,并提供到您网站的链接。[成为赞助商]
许可
本项目采用Apache 2.0许可协议。
联系方式
如果您有任何问题或功能请求,请与我们联系。欢迎提交PR。